여기에 몇 가지 관련 클래스가 있습니다. 하나는 수레 목록을 포함합니다. 하나는 단지 하나만 포함하고 있습니다. 가끔씩 나는 이것을 함께 번식시키고 싶다. 이 경우 목록이 아닌 목록을 '승격'하고 싶습니다. 여기에 내가 원하는 방식으로 작동하는 코드가 있습니다.내가 templatize 할 때 암시 적 변환이 일어나지 않습니다.
#define LIST_SZ 4
class Vec1;
class Vec1_list {
public:
Vec1_list() {}
Vec1_list(const Vec1& in);
float x[LIST_SZ];
};
class Vec1 {
public:
Vec1() {}
Vec1(const float& in);
float x;
};
Vec1::Vec1(const float& in) {
x = in;
}
Vec1_list::Vec1_list(const Vec1& in) {
for (int i = 0; i < LIST_SZ; i++) {
x[i] = in.x;
}
}
Vec1_list operator*(const Vec1_list& a, const Vec1_list& b) {
Vec1_list tmp;
for (int i = 0; i < LIST_SZ; i++) {
tmp.x[i] = a.x[i]*b.x[i];
}
return tmp;
}
int main(void) {
Vec1 v1;
Vec1_list v2, v3, answer;
answer = v1*v3;
}
하지만 지금은
#define LIST_SZ 4
template <typename T> class Vec1;
template <typename T>
class Vec1_list {
public:
Vec1_list() {}
Vec1_list(const Vec1<T>& in);
T x[LIST_SZ];
};
template <typename T>
class Vec1 {
public:
Vec1() {}
Vec1(const T& in);
T x;
};
template <typename T>
Vec1<T>::Vec1(const T& in) {
x = in;
}
template <typename T>
Vec1_list<T>::Vec1_list(const Vec1<T>& in) {
for (int i = 0; i < LIST_SZ; i++) {
x[i] = in.x;
}
}
template <typename T>
Vec1_list<T> operator*(const Vec1_list<T>& a, const Vec1_list<T>& b) {
Vec1_list<T> tmp;
for (int i = 0; i < LIST_SZ; i++) {
tmp.x[i] = a.x[i]*b.x[i];
}
return tmp;
}
int main(void) {
Vec1<float> v1;
Vec1_list<float> v2, v3, answer;
answer = v1*v3;
}
'멀티 포트'
이 시간을 질식 컴파일러가 .... 내가 지금처럼을 템플리트하고 싶은 말은 -> Vec1_list - 자동으로 내 Vec1를 호출하지 않습니다 건설자. 이것은 C++에서의 삶의 사실인가요? 아니면 이것을 자동으로 수행 할 수있는 방법이 있습니까? 대안은 기능에서 큰 팬이 필요하다는 것입니다.