【发布时间】:2019-10-05 18:18:36
【问题描述】:
我正在尝试为模板类和所有派生子类实现成员函数模板特化。它适用于班级本身,但不适用于孩子。
请看以下演示问题的示例:
#include <vector>
struct MyVector : public std::vector<int> {};
struct S {
template <typename T>
int make(T value) {
return 1;
}
template <typename T>
int make(const std::vector<T>& value) {
return 2;
}
};
int main() {
S s;
// return s.make(std::vector<int>{}); // returns 2, perfekt!
return s.make(MyVector{}); // returns 1 but should return 2
}
直播:https://godbolt.org/z/PgYkKf
我在 stackoverflow 上搜索了几个小时,但找不到合适的解决方案。我很感激任何提示!
【问题讨论】:
-
从标准容器继承为
std::vector? ……嗯……我对此有一种不好的预感。 -
这只是为了演示目的.. 在实际代码中没有这样做:)
标签: c++ sfinae template-specialization