函数指针在模板类中的静态方法上

时间:2016-06-19 07:18:31

标签: c++ templates

我有以下代码,我初始化一个函数指针表。解析输入文件时使用该表。

OncePerRequestFilter

如果基类TorchModule是模板类,我该如何更新代码。

class TorchModule { ... };
class TorchLinear : public TorchModule { ... };
class TorchView   : public TorchModule { ... };
...
typedef std::shared_ptr<const TorchModule> ( *load_function )( File* file );

using table_type = std::map< std::string, load_function > table_type;

table_type load_Object = {
    {"nn.Linear", &TorchLinear::load },
    {"nn.View"  , &TorchView  ::load }
};

1 个答案:

答案 0 :(得分:2)

您可以将表定义为模板类中的静态变量。

template<MODE mode>
using load_function = std::shared_ptr< const TorchModule<mode> > (*)( File* file );

template<MODE mode>
using table_type = std::map< std::string, load_function<mode> >;

template<MODE mode>
struct Table {
    static table_type<mode> table;
};

template<MODE mode>
table_type<mode> Table<mode>::table = {
    {"nn.Linear", &TorchLinear<mode>::load },
    {"nn.View"  , &TorchView<mode>  ::load }
};

注意:

  • 我使用了C ++ 11模板别名(使用)。对于C ++ 98,您可以将typedef放入模板类中。
  • 对于与其一起使用的每种不同模式,将有一个表格实例。
  • 使用C ++ 14,您可以使用模板变量,而不是在类中定义表。
  • 如果将整个事物放入模板模板化的类中,您的代码可能会变得更具可读性,以避免模板参数传播到解决方案的所有部分。