C++ 如何包装C++;键入可变参数的列表

C++ 如何包装C++;键入可变参数的列表,c++,c++17,variadic-functions,C++,C++17,Variadic Functions,刚刚开始使用折叠表达式,但它的行为还没有达到我的预期。 背景是,我希望能够在专用头文件中定义“我的列表”,以简化维护。使用不同类型的调用可以工作,但使用“我的列表”调用时不工作。 请参见示例中的注释 有没有办法让第二种呼叫类型正常工作 模板结构tl { }; 使用my_list=tl; 模板 void myFunc2() { (std::cout您需要专门处理您的类型列表(或者任何类型列表)。使用函数对象变量模板,这将是: template <typename ... Types>

刚刚开始使用折叠表达式,但它的行为还没有达到我的预期。 背景是,我希望能够在专用头文件中定义“我的列表”,以简化维护。使用不同类型的调用可以工作,但使用“我的列表”调用时不工作。 请参见示例中的注释

有没有办法让第二种呼叫类型正常工作

模板结构tl
{
};
使用my_list=tl;
模板
void myFunc2()
{

(std::cout您需要专门处理您的类型列表(或者任何类型列表)。使用函数对象变量模板,这将是:

template <typename ... Types>
static constexpr auto myFunc2 = [] {
    (std::cout << "Size: " << sizeof (Types) << std::endl, ...);     
};

template <template<class...> class TL, typename ... Types>
static constexpr auto myFunc2<TL<Types...>> = [] {
    (std::cout << "Size: " << sizeof (Types) << std::endl, ...);     
};
模板
静态constexpr auto myFunc2=[]{

(std::cout这基本上就是我想要的。只有一件事我还不明白。如果我只有你例子中的第二个函数,并且只使用调用'myFunc2()'这会导致编译错误。尖括号内的模式匹配需要使用部分专门化,这意味着必须有一个相同类型的主模板。在这里,我们使用变量模板,因此必须有一个主变量模板;您也可以使用类模板,在这种情况下,您需要一个主类模板(可能不完整),但是你也需要<代码> MySimult作为一个函数模板或可变模板转发到类模板。请将C++标签添加到所有C++问题,这样更多的用户会看到该帖子。