编译时出错
INLINE template<typename T> T *&Animation::GetKey(int subAnim, int node, int frameInSubAnim)
{
const int keyIndex = GetKeyIndex(subAnim, node, frameInSubAnim);
return static_cast<T*>(m_Keys[keyIndex]);
}
出现以下错误
d:\before_me\motion\pipeline\animation\AnimationData.inl(98):
error C2440: 'return' : cannot convert from 'Motion::Animation::Key *' to 'Motion::Animation::Key *&'
以及我如何解决它?
答案 0 :(得分:3)
编译器告诉您static_cast<T*>(...)
产生一个临时( rvalue )并且不能被非const引用绑定(返回类型为T*&
)。请注意,即使它会绑定到T*const&
你真的不想要它。
目前尚不清楚您要实现的目标,但请考虑返回T*
(删除引用)。
答案 1 :(得分:2)
我认为这会捕获您想要的内容并提供可怕的解决方法
void* m_keys[] = { 0, 0, 0 };
template<typename T>
T*& foo(const int index)
{
return *reinterpret_cast<T**>(&m_keys[index]);
}
int main()
{
foo<int>(0) = new int();
}