gpt4 book ai didi

c++ - 在模板中输入条件

转载 作者:IT老高 更新时间:2023-10-28 12:34:20 25 4
gpt4 key购买 nike

在给定 C++ 模板类型的情况下,是否可以只构建部分代码?这将是一个湖泊:

#include <iostream>

using namespace std;

template<typename T>
void printType(T param)
{
#if T == char*
cout << "char*" << endl;
#elif T == int
cout << "int" << endl;
#else
cout << "???" << endl;
#endif
}

int main()
{
printType("Hello world!");
printType(1);
return 0;
}

最佳答案

类型特征:

#include <iostream>
#include <type_traits> // C++0x
//#include <tr1/type_traits> // C++03, use std::tr1

template<typename T>
void printType(T param)
{
if(std::is_same<T,char*>::value)
std::cout << "char*" << endl;
else if(std::is_same<T,int>::value)
std::cout << "int" << endl;
else
std::cout << "???" << endl;
}

或者更好的是,只需重载函数:

template<class T>
void printType(T partam){
std::cout << "???" << endl;
}

void printType(char* partam){
std::cout << "char*" << endl;
}

void printType(int partam){
std::cout << "int" << endl;
}

部分排序将注意调用正确的函数。此外,在一般情况下,重载优于模板特化,参见 this。和 this artice为什么。如果您完全必须打印类型,则可能不适用于您,因为重载函数会考虑隐式转换。

关于c++ - 在模板中输入条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6251889/

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