考虑:
#include <vector>
template<int N> class B {};
template<int N> class A {};
template<int N, template<int> class T>
void doSomething(T<N> const& my_type) {
//do sth...
}
int main() {
B<42> b;
doSomething(b); //OK
std::vector<A<43>> vec_a;
doSomething(vec_a); //FAIL: "no matching function for call to 'doSomething'
// "candidate template ignored: could not match N against 'A<43>'"
return 0;
}
我知道编译器没有将 N 与 43 绑定,而是尝试将其与 A<43> 绑定(这是有道理的,因为 vec_a 是类型std::vector<A<43>>
而不是类型std::vector<A><43>
或类似的东西)并且逻辑上没有这样做。
我应该怎么办 ?(编译器:clang++ 3.3)