【发布时间】:2015-05-17 17:21:50
【问题描述】:
我有以下代码,其中有一个模板类和一个类型,我想在单独的模板函数中使用它。
template <typename... Types>
struct MyClass
{
enum SomeEnum { value0 = -1 };
};
template <typename... Types>
struct OtherClass
{
};
template <typename T, typename... Types>
T check(typename MyClass<Types...>::SomeEnum value)
{
OtherClass<Types...> obj;
T result;
// calculate result from obj;
return result;
}
int main() {
auto value = MyClass<int, bool>::value0;
// ...
int t = check<int>(value);
}
我认为编译器将能够从函数调用中推断出参数包,因此我也可以在函数模板中使用它。不幸的是编译器无法推断它:
$ g++ -std=c++11 op.cpp
op.cpp: In function ‘int main()’:
op.cpp:25:27: error: cannot convert ‘MyClass<int, bool>::SomeEnum’ to ‘MyClass<>::SomeEnum’ for argument ‘1’ to ‘T check(typename MyClass<Types ...>::SomeEnum) [with T = int; Types = {}; typename MyClass<Types ...>::SomeEnum = MyClass<>::SomeEnum]’
int t = check<int>(value);
有没有办法将模板参数包“转移”到模板函数中?
【问题讨论】:
标签: c++ templates c++11 variadic