编译器生成错误的模板函数调用?

时间:2018-02-06 15:20:39

标签: c++ templates

我有这个结构:

template<typename T>
struct static_type_array

在其中我有这些功能:

inline T* Get(s32 Index)
inline const T* Get(s32 Index) const 
inline T* operator[](s32 Index)
inline const T* operator[](s32 Index) const

我创建了这些变量:

static_type_array<vertex> Vertices;
static_type_array<u32> Indices;

问题是,当我打电话给Indices[Index]时,我接触到了这个功能:

static_type_array<u32>::operator[]...

正如预期的那样......但是在这个函数(operator[])中我用调用得到的索引调用Get,这就是:

static_type_array<vertex>::Get(s32 Index)...

这真奇怪.. 我试图弄清楚发生了什么,我看到了一些东西......

此代码:

inline T* operator[](s32 Index)
{
    T* Result = Get(Index);
    return Result;
}

将生成对相应函数(<u32>)的调用,而此代码为:

inline T* operator[](s32 Index)
{
    return Get(Index);
}

将生成对错误函数(<vertex>)...

的调用

我想也许它是内联但我尝试删除它而不是那个。

知道我的代码是怎么回事?

编辑:如果我遗漏任何信息,请告诉我。

0 个答案:

没有答案