dar*_*ush 5 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 {
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>();
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
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>();
^
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?
1.您需要声明它T是模板模板参数,否则您无法将其与模板参数一起使用(实例化)。
template <template <size_t, size_t> class T>\ninline T<state_dim, action_dim>* get_plugin(const string& plugin) const {\nRun Code Online (Sandbox Code Playgroud)\n\ntemplate2.调用成员函数模板时需要插入关键字get_plugin。
auto sepp = instance.template get_plugin<plugin_SEP>();\nRun Code Online (Sandbox Code Playgroud)\n\n请参阅在哪里以及为何必须放置 \xe2\x80\x9ctemplate\xe2\x80\x9d 和 \xe2\x80\x9ctypename\xe2\x80\x9d 关键字?更多细节。
\n| 归档时间: |
|
| 查看次数: |
5227 次 |
| 最近记录: |