我有(可能)一个简单的问题。什么时候必须声明模板中使用的函数?打印出以下代码(使用 gcc >=4.1):
初始化我的 A 对象
没有初始化
使用 gcc 4.0 打印出以下代码:
初始化我的 A 对象
初始化我的字符串对象
#include <iostream>
#include <string>
template<typename T>
void init(T& t){
std::cout << "no init" << std::endl;
}
// void init(std::string& t);
template <typename T>
void doSomething(T& t){
init(t);
// do some further stuff
}
void init(std::string& t){
std::cout << "init my string object" << std::endl;
}
class A{
};
void init(A& t){
std::cout << "init my A object" << std::endl;
}
int main(){
A a;
doSomething(a);
std::string s("test");
doSomething(s);
return 0;
}
std::string 和 A 的用法有什么区别?不应该有相同的行为吗?
使用附加的前向声明它可以正常工作,但是我什么时候需要它?
干杯,CSpille