我有一个带有使用案例的以下函数:
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>();
^
这里我错过了什么?
typename T
,你自己说过T
是一个 类型。然而后来你却试图将它用作 模板。类型和模板是两个完全不同的东西。为什么你要试图将类型名称用作模板名称呢? - AnT stands with Russia