c++ - 嵌套模板问题

标签 c++ templates

我有一个这样声明的嵌套模板类:

template<typename T>
class IDMap
{
private:
    struct Item {
        uint16_t mVersion;
        T mItem;

        template <typename... Arguments>
        Item(uint16_t version, Arguments&&... args);
    };

    // ....
}

稍后我想定义 item 的构造函数,这是我的尝试:

template <typename T, typename... Arguments>
IDMap<T>::Item::Item(uint16_t version, Arguments&&... args) : mVersion(version), mItem(std::forward<Arguments>(args)...)
{
}

虽然上面没有编译,它只是说 'IDMap<T>::Item::{ctor}' : unable to match function definition to an existing declaration .缺少某些东西 - 正确的语法是什么?

最佳答案

正确的语法是:

template <typename T>
template <typename... Arguments>
IDMap<T>::Item::Item(uint16_t version, Arguments&&... args) : mVersion(version), mItem(std::forward<Arguments>(args)...)
{
}

DEMO

关于c++ - 嵌套模板问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28896802/

相关文章:

C++如何比较字符串和忽略空格的指针?

c++ - libc++ 在 macOS High Sierra 上损坏

c++ - 在运行时生成可变参数列表

c++迭代模板函数接受的对象

c++ - 错误 c2953 : class template has already been defined

c++ - 具有模板实例化的模板静态库

c++ - 在新线程中构造对象?

c++ - 在 uint64_t 位掩码中高效加载/计算/打包 64 个双重比较结果

c++ - 如何初始化不可访问模板类的静态成员?

c++ - 使用 std::for_each 遍历树