我写了一个可变参数模板,它接受可变数量的char参数,即
template <char... Chars>
struct Foo;
Run Code Online (Sandbox Code Playgroud)
我只是想知道是否有任何宏技巧允许我使用类似于以下语法实例化它:
Foo<"abc">
Run Code Online (Sandbox Code Playgroud)
要么
Foo<SOME_MACRO("abc")>
Run Code Online (Sandbox Code Playgroud)
要么
Foo<SOME_MACRO(abc)>
Run Code Online (Sandbox Code Playgroud)
等等
基本上,任何阻止你单独写字符的东西,就像这样
Foo<'a', 'b', 'c'>
Run Code Online (Sandbox Code Playgroud)
这对我来说不是一个大问题,因为它只是一个玩具程序,但我想我还是会问.
以下程序使用警告在C中编译良好,但在C++中编译失败.为什么?是什么原因?
#include <stdio.h>
int main(void)
{
char a[5]="Hello";
a[0]='y';
puts(a);
for(int i=0;i<5;i++)
printf("%c",a[i]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
警告:
Warning:[Error] initializer-string for array of chars is too long [-fpermissive] enabled by default
Run Code Online (Sandbox Code Playgroud)
但是如果程序编译为C++程序,则C++编译器会出现以下错误:
[Error] initializer-string for array of chars is too long [-fpermissive]
Run Code Online (Sandbox Code Playgroud)
我正在使用GCC 4.8.1编译器.