将模板化类作为参数的C++方法

Nil*_*ils 4 c++

我有一个模板课

Vector<class T, int N> 
Run Code Online (Sandbox Code Playgroud)

其中T是组件的类型(例如,double)和n组件的数量(因此对于3D矢量,N = 3)

现在我想写一个像这样的方法

double findStepsize(Vector<double,2> v)
{..}
Run Code Online (Sandbox Code Playgroud)

我也希望对三维和更高维矢量这样做.当然,我可以为更高维度引入更多方法,但这些方法会有很多冗余代码,所以我想要一个更通用的解决方案.有没有办法创建一个方法,它采用模板化的类而不进一步专门化(在这种情况下,不指定T或N)?喜欢

double findStepsize(Vector<T,N> v)
Run Code Online (Sandbox Code Playgroud)

Joh*_*itb 11

是的

template<typename T, int N>
double findStepsize(Vector<T,N> v)
{..}
Run Code Online (Sandbox Code Playgroud)

如果你有一个特定称呼它Vector<T, N>,编译器会推断 TN以适当的值.

Vector<int, 2> v;
// ... fill ...
findStepsize(v); /* works */
Run Code Online (Sandbox Code Playgroud)

上面的value-parameter与你的例子相匹配,但最好通过const引用(Vector<T, N> const&而不是)传递需要在其副本构造函数中工作的用户定义的类.所以你避免复制,但仍然无法改变调用者的参数.