阿发君 2022-08-08 16:00 采纳率: 100%
浏览 39
已结题

关于C++模板函数的疑问

关于C++模板函数的疑问,看代码时遇到如下代码,无法理解:

template<typename B, typename... Args>
class RegisterFactoty : public NoCopyable {
public:
    using CreatorFunc = std::function<std::shared_ptr<B>(Args...)>;
    static RegisterFactoty& Instance()
    {
        static RegisterFactoty r;
        return r;
    }

    template<typename T, typename std::enable_if_t<std::is_base_of_v<B, T>>* = nullptr>
    std::string DoRegister(const std::vector<std::string>& names, CreatorFunc f)
    {
        std::string result;
        for (const auto& it : names) {
            result += it;
            builder_.emplace(it, f);
        }
        return result;
    }

    std::shared_ptr<B> CreateShared(const std::string& name, Args... args)
    {
        std::shared_ptr<B> result = nullptr;
        for (auto&& [n, builder] : builder_) {
            if (n == name) {
                result = builder(std::forward<Args>(args)...);
                break;
            }
        }
        return result;
    }
    RegisterFactoty() = default;
    ~RegisterFactoty() = default;
private:
    std::unordered_map<std::string, CreatorFunc> builder_;
};

其中的模板函数是什么意思?如下:

template<typename T, typename std::enable_if_t<std::is_base_of_v<B, T>>* = nullptr>
    std::string DoRegister(const std::vector<std::string>& names, CreatorFunc f)
  • 写回答

1条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 系统已结题 8月17日
      • 已采纳回答 8月9日
      • 修改了问题 8月8日
      • 创建了问题 8月8日

      悬赏问题

      • ¥15 在python中如何把字典转换为csv
      • ¥15 matlab数据信号处理问题
      • ¥15 为什么Js中函数还可以有实例对象?
      • ¥15 一块长方形的大布料截取若干个小的长方形布料,小长方形布料不能旋转,怎么使组成的不规则图形的长度最小?
      • ¥15 iPhone13视频通话屏幕闪黑
      • ¥15 linux平台中qt5对触屏操作偶尔不响应
      • ¥15 不使用zk实现双机clickhouse、kafka数据同步
      • ¥15 使用Labwindows/CVI程控万用表时自动切换量程
      • ¥15 Matlab修改xml参数后允许不了exe文件
      • ¥15 用flask框架接收前端上传的文本文件后怎么读取该文件