У меня есть следующий код, где у меня есть класс шаблона и его тип, который я хотел бы использовать в отдельной функции шаблона.Вычислить пакет параметров шаблона из вызова функции
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);
}
Я учил, что компилятор сможет вывести параметр пакет из вызова функции, так что я могу использовать его в шаблоне функции также. К сожалению, компилятор не может вывести его:
$ г ++ -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);
Есть ли решение для «передачи» параметр пакета шаблона функции шаблона?
Спасибо, это хорошая идея, к сожалению, в самом коде я должен держать оба класса независимыми. – simon
Хотя я разработал решение с использованием кортежей, я собираюсь принять этот ответ, потому что вместо этого я решил перестроить свой код. – simon