【发布时间】:2011-06-02 18:03:40
【问题描述】:
我编写了一个可变参数模板,它接受可变数量的char 参数,即
template <char... Chars>
struct Foo;
我只是想知道是否有任何宏技巧可以让我使用类似于以下的语法来实例化它:
Foo<"abc">
或
Foo<SOME_MACRO("abc")>
或
Foo<SOME_MACRO(abc)>
等等
基本上,任何能阻止你单独写字符的东西,就像这样
Foo<'a', 'b', 'c'>
这对我来说不是什么大问题,因为它只是一个玩具程序,但我想我还是会问。
【问题讨论】:
-
"abc"与'a', 'b', 'c', '\0'基本相同,除了指针内容。 -
过去的情况是,如果模板是通过 char* 参数化的,则无法使用原始 C 字符串在 C++ 中实例化模板。他们在 C++0x 中解决了这个问题吗?如果是这样,我想我有办法正确地进行此扩展。
-
@Ignacio:我知道,但你不能为
char...模板参数写"abc"。 @templatetypedef:该模板没有在char*上进行参数化,它是char...上的可变参数模板 -
@Peter Alexander:是的,是的...但是您不能构建一个辅助模板类,该类在导出元组的 char* 上参数化,然后创建一个实例化该辅助模板的宏,然后提取元组会输入吗?我就是这么想的。
-
我认为,在 C++0x n3225 中,规范还允许
constexpr char index(char const *x, int n) { return x[n]; }。然后你可以说int x[index("\x4\x5", 1)];来创建一个int[5]例如。这就是函数调用替换。
标签: c++ string c++11 c-preprocessor