我想寫一個函數,將第一個參數設置爲第二個參數的值。但是,當第二個參數是一個容器類時,我希望它將第一個參數設置爲容器的第一個元素。我發現this問題,它回答了類似的問題,但是,我似乎無法得到它在我的情況下工作。C++函數重載的Iterable類
當我編譯這段代碼時,我得到一個錯誤,說SetVar是不明確的。無論如何要讓功能正常工作嗎?
這是到目前爲止我的代碼...
#include <iostream>
#include <vector>
template<typename T1,typename T2>
static void SetVar(T1& a, const T2 &b, typename T2::const_iterator= T2().begin()){
//Check to make sure b contains an element.
if(b.begin()!=b.end()) a=*b.begin();
}
template<typename T1,typename T2>
static void SetVar(T1& a, const T2 &b,...){
a=b;
}
int main(int argc, const char * argv[])
{
int x;
int y=5;
std::vector<int> z;
z.push_back(1);
z.push_back(3);
SetVar(x, y);
//Should print 5
std::cout<<x<<"\n";
SetVar(x, z);//<---SetVar is ambiguous
//Should print 1
std::cout<<x<<"\n";
return 0;
}
優秀的解決方案,但有沒有什麼辦法可以讓這個工作沒有C++ 11的功能? – 2012-08-12 02:50:01
是的,我認爲從'std ::'我用過的所有東西都在Boost一段時間,你可以移動返回類型來擺脫'auto'和trailing-return-types。 – aschepler 2012-08-12 02:52:16
感謝@LucDanton的修復。我知道,在提交之前我應該嘗試一下。 – aschepler 2012-08-12 02:54:04