大学では、「コンピュータ サイエンス入門」のコースに合格する必要があります。このコースでは、アセンブリ、c、c++ を使用して解決する必要があるさまざまなトピックに関するさまざまな演習を提供します。
私の問題は、さまざまなコンパイラ (g++ と Visual Studio C++) を使用しているが、それらは私が提供するコードを異なる方法で解釈するか、異なるコードを必要とするため、プログラムを少なくとも 2 回実装する必要があることです。
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. 学生です。