使用基础 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'
    //...
};

参见:Using-declaration in class definition