是否可以确定在宏或函数中传递的参数在编译时或运行时是否是字符串文字?
例如,
#define is_string_literal(X)
...
...
is_string_literal("hello") == true;
const char * p = "hello";
is_string_literal(p) == false;
Run Code Online (Sandbox Code Playgroud)
要么
bool is_string_literal(const char * s);
is_string_literal("hello") == true;
const char * p = "hello";
is_string_literal(p) == false;
Run Code Online (Sandbox Code Playgroud)
谢谢.
我有一个类来包装字符串文字并在编译时计算大小.
构造函数如下所示:
template< std::size_t N >
Literal( const char (&literal)[N] );
// used like this
Literal greet( "Hello World!" );
printf( "%s, length: %d", greet.c_str(), greet.size() );
Run Code Online (Sandbox Code Playgroud)
但是代码有问题.下面的代码编译,我想使它成为一个错误.
char broke[] = { 'a', 'b', 'c' };
Literal l( broke );
Run Code Online (Sandbox Code Playgroud)
有没有办法限制构造函数,使它只接受c字符串文字?编译时间检测是首选,但如果没有更好的方法,则可以接受运行时.
是否可以让预处理器宏确定其参数是否为字符串(文字)?
例如:
#define IS_STRING(token) ???
IS_STRING("foo") // expands to 1
IS_STRING(foo) // expands to 0
Run Code Online (Sandbox Code Playgroud)