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

4

我有一个模板类

Vector<class T, int N> 

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

现在我想编写一个类似以下方法的函数

double findStepsize(Vector<double,2> v)
{..}

我希望能够将这个方法扩展到三维及以上的向量。当然,我可以为更高维度再引入更多方法,但这些方法会有很多重复的代码,所以我需要一个更通用的解决方案。是否有一种方法可以创建一个接受模板类的方法,而无需进一步特化它(在这种情况下不指定T或N)?例如:

double findStepsize(Vector<T,N> v)

?


当然N应该至少是size_tunsigned。不应允许负分量。 - GManNickG
谢谢提示,size_t是什么? - Nils
4个回答

11
是的,它就是。
template<typename T, int N>
double findStepsize(Vector<T,N> v)
{..}

如果你使用特定的 Vector<T, N> 调用它,编译器会“推断”出适当的TN值。
Vector<int, 2> v;
// ... fill ...
findStepsize(v); /* works */

上述的参数值与您的示例相匹配,但最好通过const引用(Vector<T, N> const&)传递需要在其复制构造函数中进行工作的用户定义类。这样可以避免拷贝,但仍然无法更改调用者的参数。


1

可以这样实现:

template <typename A, int B>
class Vector {

};

template <typename T, int N>
void foo(Vector<T, N>& v) {

}

template <>
void foo(Vector<int, 3>& v) {
   // your specialization
}

1
template <typename T, size_t N>
T find_step_size( const Vector<T,N>& v )
{
    return T(); // or something
}

0

你的第二个问题的答案:

你不能有一个模板化的函数指针,那没有意义。 但是你可以这样做:

#include <vector>

template <typename T>
void foo(const std::vector<T>& v) {
   // do something
}

void (*ptr_foo)(const std::vector<int>&) = &foo<int>;

(这里的函数指针是一个模板函数,其模板参数被明确设置为int


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接