c++ - 使用从外部参数包中获取的参数类型声明一个函数

标签 c++ c++11 variadic-templates

假设我有某种类型列表

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/

相关文章:

c++ - 为什么我可以在 lambda 中使用 ostream cout,尽管它没有被捕获?

c++ - 如何返回本地对象的成员

STL vector+sort+equality vs. unordered_set vs. using pure set 的性能(内存和速度方面)

c++ - boost mpl序列模式匹配

c++ - 为 C 数学函数调用 MSVC 内置/内在函数

c++ - 三元运算符不适用于 lambda 函数

c++ - 我怎么能像 numpy 那样从 MxN 矩阵中减去 1xN 特征矩阵?

c++ - 使用结构中的成员进行动态分配

c++ - 如何对非类型参数包的元素执行算术运算?

c++ - 符号 T&&..(2 点)是什么意思?