【发布时间】:2014-01-27 17:11:35
【问题描述】:
对于给定的模板,例如std::string,模板可以检测被声明/定义的string 的实例是否为常量。 (注意:我不是在询问模板参数。)
std::string mutable_string("a string that may possibly be changed");
对
const std::string immutable_string("a string that will not change);
如果可能,模板可以为提供给构造函数的字符串文字准确分配堆存储量。此外,可以省略非常量、非 ctor/dtor 方法的代码生成(除非某些翻译单元定义了非常量字符串)。
我希望在语义上类似于:
is_constant<std::string>(*this)::value
是否可以将实例的类型与去掉 const 限定符的类型进行比较?
更新/澄清:扩展std::string 示例,const std::string 的模板特化能否将检查员声明为constexpr(例如size()、capacity()?
【问题讨论】:
-
"对于给定的模板,例如 std::string"
std::string不是模板。std::basic_string是。 -
@Manu343726:我想他指的是
std::basic_string...无论如何,一个对象永远不能是模板类型,而是模板的实例化,这不再是一个模板。那就是如果你真的想学学。 -
您可以使用函数来创建可变/不可变字符串:
auto mutable_string = make_mutable_string(".."); auto immutable_string = make_immutable_string("..");