는 다음과 같은 템플릿 클래스 고려와 ++ 템플릿 : 두 입력 'X'의 값을 수정해서는 안 '평가'기능 이후C 'const를'
template <typename T> class Function {
public:
virtual float eval(const T &x, const T &y) = 0;
};
와 'Y', 난 '으로 넣어 const '.
hidden overloaded virtual function 'Function<float *>::eval' declared here: type mismatch at 1st parameter
('float *const &' vs 'const float *&')
virtual float eval(const T &x, const T &y) = 0;
그리고 클래스 FOO1을 인스턴스화 할 수 없습니다 : 나는 g로 컴파일 할 때 그때 나는 다음과 같은 경고를 얻을 ++ 기능
class Foo1 : public Function <float*> {
public:
Foo1() : Function <float*>() {}
virtual float eval(const float* &x, const float* &y) { ... }
};
에서 파생 된 다음 클래스를 만들 수 있습니다. 컴파일러는 'eval'함수가 구현되어 있지 않다고 말합니다. 컴파일러가 행복하려면 같이해야합니다 파생 된 클래스는 다음과 같습니다
class Foo2 : public Function <float*> {
public:
Foo2() : Function <float*>() {}
virtual float eval(float* const &x, float* const &y) { ... }
};
FOO2 : eval 함수 대신 'const를 플로트 *'의 형 '플로트 *의 CONST'의 두 개의 매개 변수를 사용합니다. 즉, Foo2 :: eval은 'x'와 'y'배열의 내용을 수정할 수 있습니다. 이것은 내가 원하는 것이 아닙니다.
나는 다음과 같이 템플릿 클래스 '기능을'변경 시도 :
는virtual float eval(T const &x, T const &y) = 0;
그러나 FOO1 여전히 작동하지 않는 클래스는 클래스 FOO2 이전 경우와 같이 작동합니다.
- 는 그래서 템플릿 클래스 중 하나를 'const를 T & X'또는 'T의 CONST &가 X'는 파생 클래스에서 '플로트 *의 CONST & X'를 의미하는 것으로 보인다. 이 올바른지?
- 파생 클래스에서 'const float * & x'(또는 'const float * x')를 원한다면 템플릿 클래스 함수는 무엇이되어야합니까?
고맙습니다.