我正在用 C++ 编写一个与 numpy 等效的可变维度数组。我使用模板类在数组中存储不同类型的数据类型。
最终,我不得不编写数据类型转换的代码。我想让数组将其数据类型更改为另一种数据类型,因此我编写了一个用于转换的构造函数。但是,该类必须访问该类的私有值,但具有不同的模板参数。
以下是一个最小的示例:
template <typename T>
class my_class
{
private:
T value;
public:
// Constructor to initialize the data
my_class(T value) : value(value) {}
// Constructor for the conversion
template<typename O>
my_class(my_class<O> another)
{
value = static_cast<T>(another.value); // Cast the type to T
}
};
但是,当我尝试运行以下测试代码时:
int main()
{
// Create an integer class
my_class<int> a = 3;
// Convert it to float
my_class<float> b = a;
return 0;
}
MSVC 发出此错误:
error C2248: 'my_class<int>::value': cannot access private member declared in class 'my_class<int>'
我尝试通过以下方式将朋友添加到个人
my_class
es:
template <typename T>
class my_class
{
// ...
public:
template <typename U>
friend class my_class<U>;
// ...
}
但是发生了这个错误:
friend class my_class<U>;
^~~~~~~~~^
error C3772: 'my_class<U>': invalid friend template declaration
有没有办法添加一个友元类,它本身是但具有不同的模板参数? 或者,如果这是不可能的,是否有办法访问类本身的私有方法/值,但使用不同的模板参数?
但是,我更喜欢朋友方法,因为它允许我只添加朋友一次并稍后访问私有方法/值。
你想要这个:
template <typename U>
friend class my_class;