0
在下面的代碼似乎容器的可變參數模板版本不繼承的容器的單一模板版本的名稱函數g ++ 4.5.2抱怨:類具有可變參數模板成員函數繼承
no matching function for call to 」Container<Variable1, Variable2>::name(Variable2)」
candidate is: std::string Container<First_Variable, Rest ...>::name(First_Variable) [with First_Variable = Variable1, Rest = {Variable2}, std::string = std::basic_string<char>]
代碼:
#include "iostream"
#include "string"
using namespace std;
struct Variable1 {
string operator()() {
return string("var1");
}
};
struct Variable2 {
string operator()() {
return string("var2");
}
};
template<class... T> class Container;
template<class First_Variable, class... Rest>
class Container<First_Variable, Rest...> : public Container<Rest...> {
public:
string name(First_Variable variable) {
return variable();
}
};
template<class Variable> class Container<Variable> {
public:
string name(Variable variable) {
return variable();
}
};
int main(void) {
Container<Variable1, Variable2> c;
cout << "Variables in container: " << c.name(Variable1()) << ", " << c.name(Variable2()) << endl;
return 0;
}
什麼我做錯了,或者這甚至應該工作?
謝謝!至少g ++到4.7-20120211和clang ++ 3.0不會抱怨與剽竊。有沒有其他方法可以實現這一點,還是我不得不依賴編譯器不嚴格執行此操作? – user1226313 2012-02-22 18:11:45
@user你可以專注於'和''。但我認爲你的代碼不會被編譯器拒絕。所以我可能會保持原樣。 –
2012-02-22 18:17:28