1
可以說我有兩個類。第一個是簡單的模板類Point<N, T>
,另一個是Function<Point<N, T>>
。是否可以在類Function中訪問以鍵入T
和int N
。模板模板參數訪問
這裏是我的Point
我認爲這是確定
template<int N, class T>
class Point {
public:
Point() {
std::fill(std::begin(data), std::end(data), T(0));
}
Point(const std::initializer_list<T> &init) {
std::copy(init.begin(), init.end(), std::begin(data));
}
public: // just for easier testing, otherwise protected/private
T data[N];
};
現在Function
實現,我認爲有一些問題
template<template<int, typename> class P, int N, typename T>
class Function {
public:
T operator()(const P<N, T> &pt) {
for (int i = 0; i < N; i++) {
// do something and expect loop unrolling
}
return T(0); // for example's sake
}
T operator()(const P<N, T> &pt1, const P<N, T> &pt2) {
// force pt1 and pt2 to have the same `N` and `T`
return T(0); // for example's sake
}
};
這裏就是我想象我會用我的班。也許我在想太多java-like :)
typedef Point<3, float> Point3f;
typedef Point<4, float> Point4f;
Point3f pt3f({ 1.0, 2.0, 3.0 }); // Point<3, float>
Point4f pt4f({ 1.0, 2.0, 3.0, 4.0 }); // Point<4, float>
Function<Point3f> f3; // Function<Point<3, float>> f3;
float val = f3(pt3f); // no error
float val = f3(pt3f, pt3f); // no error
float val = f3(pt4f); // compile error
float val = f3(pt4f, pt3f); // compile error
我該如何實現這樣的行爲?我不斷收到這樣的錯誤"Point<3, float>" is not a class template
或too few arguments for class template "Function"
謝謝你的幫助。現在工作。我擔心這是不可能的。 – mitjap