关于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)