从模板基类

时间:2017-06-16 22:22:22

标签: c++ templates inheritance

以下是我的问题的MCVE:

#include <cstdlib>
#include <cstdint>

template<std::size_t CAPACITY>
class Buffer
{
public:
    template<std::size_t PARAM_SIZE>
    void pushArray(const uint8_t values[PARAM_SIZE])
    {
        // method's body (not important)
    }
};

template<std::size_t CAPACITY>
class BetterBuffer : public Buffer<CAPACITY>
{
public:
    template<typename TYPE>
    void push(TYPE value)
    {
        typedef uint8_t arrayType_t[sizeof(TYPE)];
        const arrayType_t &array = (arrayType_t&)value;
        Buffer<CAPACITY>::pushArray<sizeof(TYPE)>(array);
    }
};

int main()
{
    BetterBuffer<10> buffer;
    buffer.push(100);
    return 0;
}

编译器输出以下错误消息。

main.cpp: In instantiation of ‘void BetterBuffer<CAPACITY>::push(TYPE) [with TYPE = int; long unsigned int CAPACITY = 10]’:
main.cpp:31:24:   required from here
main.cpp:24:40: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘long unsigned int’ to binary ‘operator<’
             Buffer<CAPACITY>::pushArray<sizeof(TYPE)>(array);
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~

我用命令g++ -Wall -std=c++17 main.cpp编译它。

我在版本中使用g ++:'g ++(Ubuntu 7.1.0-5ubuntu2~16.04)7.1.0'。

如果我从类Buffer中删除模板参数或将方法pushBetterBuffer移到Buffer,那么程序可以编译没有问题。

此特定代码有什么问题?

0 个答案:

没有答案