[英]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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.