C ++:模板成员函数,如模板<typename t =“”> int foo <t>()</t> </typename>

时间:2014-07-29 00:35:40

标签: c++ class templates

我想在一个不是模板的类中使用模板定义成员函数:

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;
}

1 个答案:

答案 0 :(得分:4)

无需<T>

class Foo {
    public:
        template <typename T>
        int doThing(int num);
};