如何定义模板类类型的对象?

时间:2010-10-29 09:17:57

标签: c++

如果我有这种结构:

namespace A
{
    template <Class T>
    struct Point
    {
        Point<T>(T x_, T y_) : x(x_), y(y_) {}

        Point<T>() : x(0), y(0) {}

         T x;
         T y;
    }
}

我如何定义Point结构中的对象?

我试过了:

A::Point point;

但它不起作用。

5 个答案:

答案 0 :(得分:5)

即:

 A::Point<int> point;
 A::Point<int> point(1,1);

但首先修复错误(注意“类”和缺少分号的情况):

namespace A
{
    template <class T>
    struct Point
    {
        Point<T>(T x_, T y_) : x(x_), y(y_) {}

        Point<T>() : x(0), y(0) {}

         T x;
         T y;
    };
}

答案 1 :(得分:2)

这里似乎有一些语法错误。如果您将代码更正为:

namespace A
{
    template <class T> // Class is lowercase
    struct Point
    {
        Point(T x_, T y_) : x(x_), y(y_) {} // No need for <T>

        Point() : x(0), y(0) {} // No need for <T>

         T x;
         T y;
    }; // Semi colon
}

然后:

A::Point<int> point;

有效。你需要告诉它模板参数是什么,在这种情况下无法自动推断它。

答案 2 :(得分:1)

在实例化结构时必须指定template argument,例如:

A::Point<double> point;

答案 3 :(得分:0)

例如,

A::Point<int> point;A::Point<float> point; - 您需要指定要专门化的类型。否则,编译器将如何知道T是哪种类型?

答案 4 :(得分:0)

首先,您需要在struct Point的定义后添加分号。声明类型为A::Point<int>的实例:

A::Point<int> point;