构造函数,其中另一个模板类作为C++中的参数

Constructor with another template class as a parameter in C++

本文关键字:C++ 参数 另一个 构造函数      更新时间:2023-10-16

我在模板类方面遇到了这个问题。我想用另一个类制作一个构造函数作为不同类型的参数,但每次我尝试初始化类的属性时,我都会收到错误,说它是私有的,我无法访问它。我将不胜感激任何帮助。

下面是简单的代码:

template <typename Type>
class SomeClass {
    Type p;
public:
    SomeClass(Type x) { p = x; }
    template <typename Type2>
        SomeClass(SomeClass<Type2> k) { p = k.p; }
    Type GetP() { return p; }
};
int main()
{
    SomeClass<double> c(2.4);
    SomeClass<int> c1(c);
    std::cout << c1.GetP() << std::endl;
    return 0;
}

只需将类声明为好友:

template <typename Type>
class SomeClass {
    Type p;
public:
   template <typename Type2> friend class SomeClass;
    SomeClass(Type x) { p = x; }
    template <typename Type2>
        SomeClass(SomeClass<Type2> k) { p = k.p; }
    Type GetP() { return p; }
};

现场演示

SomeType<T>SomeType<U>是不同的类型,因此无法访问其他类的私有(或受保护)成员。

在您的情况下,您可以使用您的吸气剂:

template <typename Type2>
SomeClass(const SomeClass<Type2>& k) { p = k.GetP(); }

现场演示