gpt4 book ai didi

c++ - 在模板函数中使用 C++ RTTI,aCC 编译器给出编译错误

转载 作者:行者123 更新时间:2023-11-30 03:04:43 25 4
gpt4 key购买 nike

代码如下:

#include<iostream>
#include<string>
#include<occi.h>
using namespace std; using namespace oracle::occi;

template<class T> void print(T val) {
if (typeid(val).name()==typeid((int)1).name())
{
val+=2;
}
else if (typeid(val).name()==typeid((string())).name())
{
val+="string";
}
cout<<val<<endl; }

int main() {
int a=100;
string str="abcdef";
print(str);
print(a);
return 0;
}

aCC编译器报错信息如下:

aCC -AA  +DD64 -mt   -g -D_DEBUG_ -I/oracle/app1/oracle/product/9.2/rdbms/demo  -I/oracle/app1/oracle/product/9.2/rdbms/public -I/oracle/app1/oracle/product/9.2/plsql/public  -I/oracle/app1/oracle/product/9.2/network/public   -c test4.cpp
Error 203: "test4.cpp", line 16 # Cannot assign 'int' with 'const char *'.

val+="string";
^^^^^^^^

Error 445: "test4.cpp", line 21 # Cannot recover from earlier errors.
int main()
^^^^^^^^^^
*** Error exit code 2

Stop.

最佳答案

您应该使用模板特化来实现这一点:

/* template declaration - no definition (you can add a definition as default
for unknown types if you want)
*/
template<class T> void print(T val);

// This will be used if the parameter is of type int
template<>
void print<int>(int val) {
val += 2;
cout << val << endl;
}

// This will be used if the parameter is of type string
template<>
void print<std::string>(std::string val) {\
val += "string";
cout << val << endl;
}

或者,您可以只为要处理的每种类型编写重载:

// This will be used if the parameter is of type int
void print(int val) {
val += 2;
cout << val << endl;
}

// This will be used if the parameter is of type string
void print(std::string val) {\
val += "string";
cout << val << endl;
}

模板方法的优点是您可以定义一个默认实现来处理您尚未手动编写实现的所有类型。如果您不需要,重载方法更简单、更安全。

关于c++ - 在模板函数中使用 C++ RTTI,aCC 编译器给出编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8428099/

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