说我有
T rawData;
class A {
public:
T data; // the only data member
void process(void);
// more methods;
};
为了使用ptr->process();
和其他方法,最安全的A* ptr = (A*) &rawData;
方法是什么?
上面的方法是可行的,但是有些编译器会在违反严格的别名规则时发出警告。当然,创建一个A
的示例,设置data
,然后在所有处理之后取回它是安全的--但这正是我想避免的。
1条答案
按热度按时间gk7wooem1#
某些编译器在违反严格的别名规则时发出警告
他们是绝对正确的。解决方案,他们会接受:
但是,如果你把
void A::process()
变成一个自由函数void process(T& data)
,这将是一个更好的解决方案。