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

时间:2015-06-10 22:56:52

标签: c++

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

以下是简单的代码:

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;
}

2 个答案:

答案 0 :(得分:3)

只需将该类声明为朋友:

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; }
};

LIVE DEMO

答案 1 :(得分:0)

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

在您的情况下,您可以使用您的getter:

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

Live Demo