gpt4 book ai didi

c++ - 模板类中静态方法的函数指针

转载 作者:行者123 更新时间:2023-11-30 03:40:35 25 4
gpt4 key购买 nike

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

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 }
};

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

template<MODE mode>
class TorchModule { ... };
template<MODE mode>
class TorchLinear : public TorchModule<mode> { ... };
template<MODE mode>
class TorchView : public TorchModule<mode> { ... };

最佳答案

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

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 中,您可以使用模板变量而不是在类中定义表。
  • 如果将整个代码放入按模式模板化的类中,避免模板参数传播到解决方案的所有部分,您的代码可能会变得更具可读性。

关于c++ - 模板类中静态方法的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37904858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com