我有一个类来包装字符串文字并在编译时计算大小。将传递的参数限制为字符串文字
的构造是这样的:
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());
有一个与代码的问题但是。下面的代码编译,我想使它成为一个错误。
char broke[] = { 'a', 'b', 'c' };
Literal l(broke);
有没有办法限制构造函数,以便它只接受c字符串文字?编译时间检测是首选,但如果没有更好的方法,则运行时间是可以接受的。
@Nawaz提到的问题具体是C字符串文字。我认为这是适当的提及。 – JaredPar
c标签可能不合适。我们拭目以待。我希望有人会利用C++ 11的新特性('constexpr',variadics等)来获得一些技巧。 –
只有在运行时才会有大小的损失?尽管如此,我会发布答案。 –