저는 "T"
유형의 객체 배열을 포함하는 벡터와 같은 클래스를 가지고 있으며 각 항목에 연산을 적용 할 4 개의 산술 연산자를 구현하려고합니다. C++ : 함수 객체로 두 가지 내장 유형의 연산자 사용
template<class T, unsigned int D>
class Vector {
public:
void operator += (const T& value) { do_for_each(???, value); }
void operator -= (const T& value) { do_for_each(???, value); }
void operator *= (const T& value) { do_for_each(???, value); }
void operator /= (const T& value) { do_for_each(???, value); }
private:
void
do_for_each(std::binary_function<void, T, T>& op, T value) {
std::for_each(data, data + D, std::bind2nd(op, value));
}
T data[D];
};
지금, 문제는, 내가 어떻게
을 통과 할 : 연산자가 동일한 상용구 코드를 포함하기 때문에 (모든 요소를 통해 반복하고 적절한 동작을 적용)// Constructors and other functions are omitted for brevity.
template<class T, unsigned int D>
class Vector {
public:
// Add a value to each item: naive implementation.
void operator += (const T&) {
for (int i = 0; i < D; ++i) {
data[i] += value;
}
}
void operator -= (const T&) { ... }
void operator *= (const T&) { ... }
void operator /= (const T&) { ... }
private:
T items[D];
};
, 나는 그것을 일반화 수 있다고 생각 2 개의 intrins를 취하는 연산자 ic 형식을 사용하고 위의 예에서 설명한대로 void
~ do_for_each
을 반환합니까? C++은 내재적 인 타입에 대해이 트릭을 할 수 없습니다. "T"
이 "int"
이면 "T::operator+="
이 작동하지 않습니다.
당신은''items' ... – Alastair
덕분에, 대 data' 고정을 고정 할 수 있습니다 그것도 아래에 –
이런 질문은 친구가 친구 오버로드 운영자를 허용하지 않는 이유는 무엇입니까 – Jonathan