我想在一个不是模板的类中使用模板定义成员函数:
class Foo {
public:
template <typename T>
int doThing(T thing, int num);
};
这很有效。但我想做的是:
class Foo {
public:
template <typename T>
int doThing<T>(int num);
};
有了这个,我得到error: expected initializer before ‘<’ token
。我不明白为什么一个有效,另一个无法理解?将typename
更改为class
并没有任何区别。
有没有办法实现这个目标?
编辑:按要求提供更多详细信息:我想要实现的是折叠此重复代码:
class Blob {
public:
int read_int8(lua_State *Lua, int offset);
int read_uint8(lua_State *Lua, int offset);
int read_int16(lua_State *Lua, int offset);
int read_uint16(lua_State *Lua, int offset);
//...
};
int Blob::read_int8(lua_State *Lua, int offset) {
int8_t *ptr = (int8_t*)this->data;
lua_pushinteger(Lua, ptr[offset]);
return 1;
}
int Blob::read_uint8(lua_State *Lua, int offset) {
uint8_t *ptr = (uint8_t*)this->data;
lua_pushinteger(Lua, ptr[offset]);
return 1;
}
int Blob::read_int16(lua_State *Lua, int offset) {
int16_t *ptr = (int16_t*)this->data;
lua_pushinteger(Lua, ptr[offset]);
return 1;
}
int Blob::read_uint16(lua_State *Lua, int offset) {
uint16_t *ptr = (uint16_t*)this->data;
lua_pushinteger(Lua, ptr[offset]);
return 1;
}
答案 0 :(得分:4)
无需<T>
。
class Foo {
public:
template <typename T>
int doThing(int num);
};