我正在寻找一些C ++语法糖,如果有办法做到这一点。我有一个将字符串映射到int的类,并定义了一个int强制转换操作符:
class C {
public:
C(const char * s) { m_index = /* value generated from s */; }
operator int(void) const { return m_index; }
protected:
int m_index;
}
如果我执行以下操作:
void foo(int f);
...
static const C s_c("TEST");
foo(s_c);
编译器只调用C的构造函数一次,并重用在每次后续使用s_c时获得的int值;这是理想的行为。我的问题是,有什么办法可以做:
foo(C("TEST"));
并让编译器生成一个静态的,如上所述,而不是每次代码被命中时临时和命中构造函数?
提前致谢。
答案 0 :(得分:1)
如果您可以使用C ++ 11,则可以使用constexpr
对文字进行转换:
// shamelessly copy-pasted from elsewhere
constexpr int some_hash(char const *in) {
return *in ? static_cast<int>(*in) + 33 * some_hash(in + 1) : 5381;
}
请注意,您有一些相当大的限制:没有临时或静态,无法访问外部变量等。