C++ 可变字符表的模板参数推导

C++ 可变字符表的模板参数推导,c++,c++14,C++,C++14,我有一个结构 template<char...> struct foo {}; 模板结构foo{}; 和一个变量函数 template<char... chars> auto make_foo(char...) { return foo<chars...>(); } 模板自动生成(字符…){ 返回foo(); } 但是,我很难找到正确的语法来自动推断字符。如前所述,叮当声给了我 decltype(make_foo('a','b','c')) =

我有一个结构

template<char...> struct foo {};
模板结构foo{};
和一个变量函数

template<char... chars> auto make_foo(char...) {
    return foo<chars...>();
}
模板自动生成(字符…){
返回foo();
}
但是,我很难找到正确的语法来自动推断字符。如前所述,叮当声给了我

decltype(make_foo('a','b','c')) == foo<>
decltype(make_foo('a','b','c'))==foo
相反,我希望

decltype(make_foo('a','b','c')) == foo<'a','b','c'>
decltype(make_foo('a','b','c'))==foo

归根结底,您不能拥有这样的
make_foo
函数,因为它的参数都是运行时值,不能转换为编译时值

但是,您可以简单地使用宏

#define make_foo(...) foo<__VA_ARGS__>{}
#定义make_foo(…)foo{}

auto make\u foo(char…)记录与
auto make\u foo(char…)
相同。这是一种不同于变量包的省略号。本诺,我没有投反对票。但是你的问题读起来像是一个几乎不懂模板函数的人试图使用变量值包参数化类型:因为它们对语言来说是新的,所以有一个假设是它们是高级的,而你对基本模板函数代码的理解不足可能被认为是在浪费读者的时间。想象一下,有人不能
“hello world”
询问多线程图像处理代码,他们调用了主函数
errcode main(参数)
。简而言之,从代码中删除所有
。(只有
——不要碰
旁边的东西)通过
'a'
。看看哪里出了问题?您的问题与varargs无关,而不是varargs在某种程度上隐藏了错误。