使用基础 class 的专业化
Use specialization from base class
我有一个从基础 class 继承的 class。派生的 class 有一个模板方法。基础 class 有此方法的专门版本:
#include <iostream>
class Base {
public:
static void print(int i) { std::cout << "Base::print\n"; }
};
class Derived : public Base {
public:
static void print(bool b) { std::cout << "Derived::bool_print\n"; }
template <typename T>
static void print(T t) { std::cout << "Derived::print\n"; }
void Foo() {
print(1);
print(true);
print("foo");
}
};
int main()
{
Derived d;
d.Foo();
return 0;
}
输出为:
Derived::print
Derived::bool_print
Derived::print
期望的输出是:
Base::print
Derived::bool_print
Derived::print
请参阅 https://onlinegdb.com/BY2znq8WV
处的代码
有什么方法可以告诉 Derived::Foo
使用 Base
中的特化而不是使用 Derived
中定义的非特化版本?
编辑
如@Erdal Küçük 所示,上述示例可能过于简单。实际上使用CRTP从Base派生子classes,所以不知道Base是否有print
方法。可以在 https://onlinegdb.com/N2IKgp0FY
找到更完整的示例
这可能有帮助:
class Derived : public Base {
public:
using Base::print; //one of the many useful usages of the keyword 'using'
//...
};
我有一个从基础 class 继承的 class。派生的 class 有一个模板方法。基础 class 有此方法的专门版本:
#include <iostream>
class Base {
public:
static void print(int i) { std::cout << "Base::print\n"; }
};
class Derived : public Base {
public:
static void print(bool b) { std::cout << "Derived::bool_print\n"; }
template <typename T>
static void print(T t) { std::cout << "Derived::print\n"; }
void Foo() {
print(1);
print(true);
print("foo");
}
};
int main()
{
Derived d;
d.Foo();
return 0;
}
输出为:
Derived::print
Derived::bool_print
Derived::print
期望的输出是:
Base::print
Derived::bool_print
Derived::print
请参阅 https://onlinegdb.com/BY2znq8WV
处的代码有什么方法可以告诉 Derived::Foo
使用 Base
中的特化而不是使用 Derived
中定义的非特化版本?
编辑
如@Erdal Küçük 所示,上述示例可能过于简单。实际上使用CRTP从Base派生子classes,所以不知道Base是否有print
方法。可以在 https://onlinegdb.com/N2IKgp0FY
这可能有帮助:
class Derived : public Base {
public:
using Base::print; //one of the many useful usages of the keyword 'using'
//...
};