在c++中对模板形参调用静态函数

Calling a static function on a template parameter in C++

本文关键字:形参 调用 静态函数 c++      更新时间:2023-10-16

下面的Java代码在泛型参数T上调用静态方法printText(text),该参数代表Printer的派生类。有可能在c++中实现完全相同的行为吗?如果是,怎么做?

public class Printer {
   public static void printText(String text) {
      System.out.println(text); 
   }
   public static <T extends Printer>void print(String text) {
      T.printText(text);
   }
   public static void main(String[] args) {
      Printer.print("Hello World!");
  }
}

是可能的:

template <typename T>
void print(const std::string& text) 
{
    T::printText(text);
}

要确保PrinterT的基,您可以将这个编译时检查添加到函数中:

    static_assert(std::is_base_of<Printer, T>::value, "T must inherit from Printer");

你可以这样做

struct A
{
    static void printMe()
    {
        std::cout << "A print n";
    }
};
struct B
{
    static void printMe()
    {
        std::cout << "B print n";
    }
};

template<typename T> void printer()
{
    T::printMe();
}
int main() {
    printer<A>();
    printer<B>();
    return 0;
}