在大学里,我必须通过“计算机科学导论”课程。在本课程中,他们会为您提供有关各种主题的不同练习,您必须使用汇编、c、c++ 来解决这些问题。
我的问题是,我正在使用不同的编译器(g++ 和 Visual Studio C++),但是它们解释我给它们的代码不同或需要不同的代码,所以我必须至少实现我的程序两次!
我正在寻找信息,我如何编写适用于 gcc 和 Visual Studio C++ 的代码。
我已经处理的一些例子:
在 VSC++ 上工作:
template<typename T, template<typename X, typename Y> class container, class Allocator>
int in(int p_number, va_list params){
std::ifstream &data = *(va_arg(params, std::ifstream*));
if(!data.good()){
return -1;
}
char delimiter = (char)va_arg(params, int), temp;
std::stringstream ss;
while((temp = data.get())!=delimiter){
if(data.eof()){
return 0;
}
ss.put(temp);
}
T value;
ss >> value;
if(data.eof()){
return 0;
}
typedef container<T, Allocator>* con_p;
container<T, Allocator> &con = *(va_arg(params, con_p));
con.push_back(value);
return 1;
}
template<typename T>
struct MAP{
template<typename itr>
static int map(itr begin, itr end, int (*fp)(int, va_list), int p_number, ...){
int p_number2 = p_number+1;
va_list list;
va_start(list, fp);
int r=0, temp;
for(; begin!=end; ++begin){
p_number = reinterpret_cast<int>(&(*begin));
temp = (*fp)(p_number2, list);
if(temp==-1){
return -1;
}
r += temp;
}
va_end(list);
return r;
}
};
template<typename T,
template<typename X, typename Y> class container,
class Allocator>
int write(const container<T, Allocator> &con, std::string filepath, char delimiter = '\n'){
std::ofstream data;
data.open(filepath, std::ios::out | std::ios::binary | std::ios::trunc);
int r = MAP<T>::map(con.begin(), con.end(), out<T>, 2, &data, delimiter);
data.close();
return r;
}
在 g++ 中工作:
template<typename T, class A, template<typename X, typename Y> class container>
int write(const container<T, A> &con, std::string filepath, char delimiter = '\n'){
long temp; int r = 0;
std::ofstream data;
data.open(filepath.c_str(), std::ios::out | std::ios::binary | std::ios::trunc);
for(typename container<T, A>::const_iterator i=con.begin(); i!=con.end(); ++i){
if(!data.good()){
data.close();
return -1;
}
temp = (long)data.tellp();
data << *i << delimiter;
r += ((long)data.tellp() - temp);
}
data.close();
return r;
}
相同的功能,但非常不同的实现,因为 VSC++ 接受的模板定义不被 g++ 接受。
PS仅以防万一,如果我的大学正在搜索互联网以找出答案,如果他们的学生正在从互联网上复制他们的作业。我的名字是 TU-Darmstadt 的 Christian W. 学生。