Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 错误:';T';不是模板_C++_Templates_C++14 - Fatal编程技术网

C++ 错误:';T';不是模板

C++ 错误:';T';不是模板,c++,templates,c++14,C++,Templates,C++14,我有一个带有用例的函数: 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 {

我有一个带有用例的函数:

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>();
模板
类代理{
// [...]
/**
*@brief get_plugin按名称获取插件
*/
模板
内联T*get_plugin()常量{
常量字符串plugin=T().name();
对于(size_t i=0;i_plugins.size();i++)
if(this->_plugins[i].first==plugin)
返回static_cast(this->_plugins.at(i).second);
返回空ptr;
}
// [...]
}
//可能的用例
auto sepp=instance.get_plugin();
但我得到以下错误:

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>();
                                                ^
错误:“T”不是模板
内联T*get_插件(常量字符串和插件)常量{
^
错误:“T”不是模板
返回static_cast(this->_plugins.at(i).second);
^
错误:“>”标记之前缺少模板参数
auto sepp=instance.get_plugin();
^
错误:在“')标记之前应该有主表达式
auto sepp=instance.get_plugin();
^

这里缺少什么?

1.您需要声明
T
是a,否则您不能将其与模板参数一起使用(实例化)

template <template <size_t, size_t> class T>
inline T<state_dim, action_dim>* get_plugin(const string& plugin) const {

请参阅以了解更多详细信息。

By
typename T
您自己说过
T
是一个类型。但后来您尝试将其用作模板。类型和模板是两个完全不同的东西。为什么您尝试将类型名称用作模板名称?它修复了前两个错误,但最后两个错误仍在e中ffect!@dariush Try
auto sepp=instance.template get_plugin();
nice,它完成了任务,但这到底是什么意思?以前从未见过这种类型的代码:/@dariush请参阅以了解更多详细信息。
auto sepp = instance.template get_plugin<plugin_SEP>();