假设我有一个可变参数模板类 . 如何创建一个函数,使其参数属于集合类型,例如 int
,参数个数等于模板类型的数量?
template <typename... Types>
class Test
{
public:
void Func(???); // I don't know how to declare such a function
}
Test<string, bool, long> myTest; // Three types
myTest.Func(905, 36, 123315); // Three arguments, but always of type int.
最后,该函数的目标是返回所提供的int的元组 . 为简单起见,我在示例代码中将函数显示为void .
2 回答
DEMO
wandbox example - (适用于C 11)
如果您不需要SFINAE,可以使用
static_assert
来确保满足您的条件:(如果您需要SFINAE,请使用
std::enable_if
. )std::conjunction检查传递给它的所有条件是否为真 .
通过上面的示例,以下调用有效/无效:
如您所见,此解决方案不允许隐式转换 . 如果要允许它们,可以使用std::is_convertible而不是
std::is_same
.