假设我有某种类型列表
template<typename... Types> struct TypeList {};
现在在其他一些类中我可以生成这样一个 TypeList
以多种方式。
template<class T> struct MyClass {
using MyList = TypeList<T, typename Something<T>::type, SomethingElse>;
// ...
};
如何使用从该类型列表中提取的参数类型声明一个方法?例如,如果我设置 MyList = TypeList<int, float, const char*>
, 求一个方法
void my_method(int, float, const char*)
待申报。
最佳答案
您可以从实现该方法的基类派生:
template <typename> struct MethodProvider;
template <typename ...Args>
struct MethodProvider<TypeList<Args...>>
{
void my_method(Args ...args);
};
template <typename T>
struct MyClassAux
{
using MyList = TypeList<T, typename Something<T>::type, SomethingElse>;
};
template <typename T>
struct MyClass
: private MyClassAux<T>
, private MethodProvider<typename MyClassAux<T>::MyList>
{
using typename MyClassAux<T>::MyList;
using MethodProvider<typename MyClassAux<T>::MyList>::my_method;
// ...
};
关于c++ - 使用从外部参数包中获取的参数类型声明一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37689548/