gpt4 book ai didi

c++ - 模板;点<2, 双>;点<3,双>

转载 作者:太空宇宙 更新时间:2023-11-04 14:38:39 27 4
gpt4 key购买 nike

我想创建自己的 Point 结构,它只是为了学习 C++。
我有以下代码:

template <int dims, typename T>
struct Point {
T X[dims];
Point(){}
Point( T X0, T X1 ) {
X[0] = X0;
X[1] = X1;
}
Point( T X0, T X1, T X2 ) {
X[0] = X0;
X[1] = X1;
X[2] = X2;
}
Point<dims, int> toint() {
//how to distinguish between 2D and 3D ???
Point<dims, int> ret = Point<dims, int>( (int)X[0], (int)X[1]);
return ret;
}
std::string str(){
//how to distinguish between 2D and 3D ???
std::stringstream s;
s << "{ X0: " << X[0] << " | X1: " << X[1] << " }";
return s.str();
}
};
int main(void) {

Point<2, double> p2d = Point<2, double>( 12.3, 45.6 );
Point<3, double> p3d = Point<3, double>( 12.3, 45.6, 78.9 );

Point<2, int> p2i = p2d.toint(); //OK
Point<3, int> p3i = p3d.toint(); //m???

std::cout << p2d.str() << std::endl; //OK
std::cout << p3d.str() << std::endl; //m???
std::cout << p2i.str() << std::endl; //m???
std::cout << p3i.str() << std::endl; //m???

char c; std::cin >> c;
return 0;
}

当然,到目前为止,输出并不是我想要的。我的问题是:如何在 Point 的成员函数中处理 Point 的维度(2D 或 3D)?

非常感谢
糟糕

最佳答案

您的尺寸在编译时由模板参数固定 dims ,所以你可以迭代它们:

std::string str(){
//how to distinguish between 2D and 3D ???
std::stringstream s;
s << "{ ";
std::copy( X, X+dims, std::ostream_iterator<T>( s, "|") );
s << " }";
return s.str();
}

此外,您可以根据 dims 提供构造函数:

Point( const T (&c) [dims] ){
std::copy( c, c+dims, X );
}

这允许像 double[] d={1,2,3}; Point<3,double> p(d); 这样的代码, 它将决定参数的数量放在别处。

对于“cast-to-point-of-ints”构造函数,您可以使用 Point作为参数:

Point<dims,int> toint() const {
Point<dims,int> result;
std::copy( X, X+dims, result.X );
return result;
}

关于c++ - 模板;点<2, 双>;点<3,双>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2779155/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com