是否有更短的写法:*((T *)(v.addr))= value;

时间:2014-07-14 18:03:14

标签: c++

我有

的模板功能
template <typename T>

在其他地方定义:

void* v.addr;

我需要简化*((T*)(v.addr))=value;

我认为它可能是:(T&)(v.addr)=value;但是当我读到堆栈溢出时它不起作用。 还有其他办法吗?

2 个答案:

答案 0 :(得分:3)

除了删除多余的括号外,你无法用该表达式做什么:

*(T *)v.addr = value;

答案 1 :(得分:1)

获取您的类型v并添加:

template_typename T>
T& get_addr() const{ return *static_cast<T*>(addr); }

然后调用:

v.get_addr<T>() = value;

将丑陋的演员阵容移动到一个位置(并使它们更明确)。