gpt4 book ai didi

c++ - 是否可以根据类模板的参数来调用类方法和全局方法?

转载 作者:行者123 更新时间:2023-12-02 20:10:09 26 4
gpt4 key购买 nike

这是我的问题:

#include <string>



struct Print
{
template <typename T>
void Printer( const T& data )
{
PrinterInstance( data );
}


void PrinterInstance( const int& data )
{
printf( "INTEGER\n" );
}
};



void PrinterInstance( const std::string& data )
{
printf( "STRING\n" );
}



int main()
{
Print print;
print.Printer( "3" );
return 0;
}

在 Print 类中,我有一个模板 Printer,它基本上根据模板的参数调用 PrinterInstance。另外,我应该能够通过在类之外添加更多 PrinterInstance 来扩展此功能。

但这不能编译。如果我仅在类内部实现 PrinterInstance,那就可以了。如果我仅在类之外实现 PrinterInstance,也可以。但是一旦我在类内部和类外部都有一个 PrinterInstance,模板将只尝试使用类 1。

我可以完成这个工作吗?

编辑:它必须在 C++11 中工作。

最佳答案

如果可以在Print内添加模板PrinterInstance()

template <typename T>
void PrinterInstance (T const & data)
{ ::PrinterInstance(data); }

调用全局PrinterInstance(),当类型完全匹配时,编译器使用方法PrinterInstance(),全局版本(通过模板方法)否则。

但是,正如 LeDYoM 的回答一样,这要求在 Printer 主体之前定义(或至少声明)PrinterInstance() 的全局版本。

以下是完整的编译示例

#include <string>
#include <iostream>

void PrinterInstance ( const std::string& data )
{ std::cout << "STRING, " << data << std::endl; }

struct Print
{
template <typename T>
void Printer (T const & data)
{ PrinterInstance( data ); }

template <typename T>
void PrinterInstance (T const & data)
{ ::PrinterInstance(data); }

void PrinterInstance (int const & data)
{ std::cout << "INTEGER, " << data << std::endl; }
};

int main ()
{
Print p;
p.Printer("3");
p.Printer(5);
}

关于c++ - 是否可以根据类模板的参数来调用类方法和全局方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58565458/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com