错误:'T'不是一个模板

5

我有一个带有使用案例的以下函数:

template<size_t state_dim, size_t action_dim>
class agent {
    // [...]
    /**
     * @brief get_plugin Get a pluging by name
     */
    template<typename T>
    inline T<state_dim, action_dim>* get_plugin() const {
        const string plugin = T<state_dim, action_dim>().name();
        for(size_t i = 0; i < this->_plugins.size(); i++)
            if(this->_plugins[i].first == plugin)
                return static_cast<T<state_dim, action_dim>*>(this->_plugins.at(i).second);
        return nullptr;
    }
    // [...]
}

// a possible usecase
auto sepp = instance.get_plugin<plugin_SEP>();

但我遇到了以下错误:
error: 'T' is not a template
    inline T<state_dim, action_dim>* get_plugin(const string& plugin) const {
           ^

error: 'T' is not a template
    return static_cast<T<state_dim, action_dim>*>(this->_plugins.at(i).second);
                       ^

error: missing template arguments before '>' token
    auto sepp = instance.get_plugin<plugin_SEP>();
                                              ^

error: expected primary-expression before ')' token
    auto sepp = instance.get_plugin<plugin_SEP>();
                                                ^

这里我错过了什么?


1
通过 typename T,你自己说过 T 是一个 类型。然而后来你却试图将它用作 模板。类型和模板是两个完全不同的东西。为什么你要试图将类型名称用作模板名称呢? - AnT stands with Russia
1个回答

5

它修复了前几个错误,但最后几个错误仍然存在! - dariush
@dariush 请尝试使用 auto sepp = instance.template get_plugin<plugin_SEP>(); - songyuanyao
不错,它完成了任务,但这是什么意思?我以前从没见过这种代码 :/ - dariush
@dariush 请查看在哪里和为什么我必须放置“template”和“typename”关键字?以获取更多详细信息。 - songyuanyao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接