我想定義一個函數foo
,它接收數據,可能操縱基礎類變量,並返回int
。但是,當我嘗試創建一個單獨的函數並使用foo
對象向量時,編譯器無法推導出模板參數。下面說明了什麼我已經試過:傳遞派生的模板類的向量
#include <vector>
template <typename T>
class Base {
public:
virtual int foo(const T& x) const = 0;
};
template <typename T>
class Derived : public Base<std::vector<T> > { // specialize for vector data
public:
virtual int foo(const std::vector<T>& x) const { return 0;}
};
template <typename T>
int bar(const T& x, const std::vector< Base<T> >& y) {
if(y.size() > 0)
return y[0].foo(x);
}
int main(int argc, char** argv) {
std::vector<double> x;
std::vector< Derived<double> > y;
bar(x, y);
}
這無法找到匹配功能bar
,與注意事項:如果答案
main.cc:16:5: note: template argument deduction/substitution failed:
main.cc:24:11: note: mismatched types ‘Base<T>’ and ‘Derived<double>’
和
main.cc:24:11: note: ‘std::vector<Derived<double> >’ is not derived \
from ‘const std::vector<Base<T> >’
原諒我位於已發佈的線程中;我讀過很多看似相關的數字,但據我所知,並沒有解決這個問題。
當然,但在我的情況'x'和'y'是一致的。編譯器會捕獲你發佈的內容,不是嗎? – glinka
@glinka看到我更新的編輯。 – vsoftco
沒錯,但我的代碼中的問題似乎並不是不一致的模板參數之一,但有些無法識別「衍生」是'Base >'。我同意代碼容易出現你突出顯示的錯誤。 –
glinka