在c++中对模板形参调用静态函数
Calling a static function on a template parameter in C++
下面的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);
}
要确保Printer
是T
的基,您可以将这个编译时检查添加到函数中:
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;
}
相关文章:
- 使用mem_fun_ref if成员函数需要多个形参
- 通过类的模板形参特化成员模板结构
- 非类型引用形参/实参
- 哪个模板形参在boost::shared_ptr构造函数中使用一个原始指针
- 如何确保迭代器模板形参与模板类的模板形参具有相同的数据类型
- 如何在编译时通过模板形参默认值的名称/指针获取函数的类型
- c++:候选模板被忽略:模板形参显式指定的参数无效
- c++中作为形参的指针
- 哪种方法更适合为函数提供编译时间常数?函数实参与模板形参
- 包含void*结构的函数的Const正确性和形参
- 传递boost::函数,该函数接受一个模板实参作为默认为NULL的形参
- 将右值引用形参强制转换为右值引用
- 给引用形参赋值使对象无效
- 当实参是初始化列表而形参是引用时,重载解析
- const整型模板形参的条件
- 使用作为模板形参提供的基类成员,不带限定符
- 为什么这样调用构造函数时模板形参推导失败?
- 调用模板形参的成员函数的Result_of
- 在c++中对模板形参调用静态函数
- 在不调用initializer_list构造函数的情况下,将不可复制、不可移动的类型构造为函数形参