为什么不能从指针转换为模板函数中的指针引用

时间:2012-11-01 19:32:34

标签: c++ templates casting

编译时出错

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 *&'

以及我如何解决它?

2 个答案:

答案 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();
}