【发布时间】:2021-01-15 00:50:04
【问题描述】:
我有一个class C 的模板函数,还有两个typename T 的模板函数,我想使用如下所示:
template <typename T>
std::string MyHelperFunction1(...) { ... }
template <typename T>
std::string MyHelperFunction2(...) { ... }
template <class C>
std::string MyFunction(...) {
// if C is an instance of Struct1<T> -> call MyHelperFunction1<Struct1<T>>
// if C is an instance of Struct2<T> -> call MyHelperFunction2<Struct2<T>>
Database db = OpenDatabase();
return MyFunction<C>(db, ...); // The same function but with different input args.
}
我发现的最接近的问题是这个 (How to check for the type of template parameter?),它不适用于我的情况,因为我在 MyFunction() 中调用了其他模板函数。什么是我想要的有效解决方案?
【问题讨论】:
-
我会避免使用具有特殊含义的
...(C-省略号或可变参数模板)。 -
谢谢你,贾罗德。尽管在这种情况下,我认为它不能以任何其他方式阅读,但我同意它具有实际含义并且可能会造成混淆。我会在以后的帖子中记住这一点。 (我现在不改变问题的原因是答案遵循相同的风格。改变问题可能会造成更多的混乱,而不是减少它们)