提问者:小点点

如何根据这个例子构造一个模板化的struct?


目前我正在学习模板和结构。我需要执行以下任务:

使用静态evala()方法创建一个结构模板ConstInt,该方法返回整数常量值。

示例:

typedef ConstInt<4> a; // represents the function a(x) = 4

我试着做了以下几件事:

template<int value>
struct ConstInt
{
    static int  eval(int x)
    {
        return x; 
    };
};

但这似乎不能给出正确的输出。当我尝试在main()中执行以下操作时,它给出了一个错误:

typedef ConstInt<4> a;

错误:typedef'a'为本地定义但未使用

我得到一个错误,但我不确定这个尝试是否实际上是有益的,以便完成任务。


共3个答案

匿名用户

我得到一个错误,但我不确定这个尝试是否实际上是有益的,以便完成任务。

您得到的错误有点误导您代码的正确性。

error: typedef 'a' locally defined but not used

声明您没有使用您创建的typedef。这可以通过简单地使用它来修复。在正常情况下,这是一个编译器警告,但如果您设置了一个编译器指令来将警告作为错误处理(例如,使用G++的),则将其算作错误。

真正的问题是,您定义时使用了一个参数,但您并不需要一个参数,并且在调用该函数时也没有一个参数,如示例中所述。

正确的结构定义和用法应该如下所示:

#include <iostream>

template<int value>
struct ConstInt {
    static int  eval() {
        return value; // the velue is already given as template parameter
    };
};

int main() {
    typedef ConstInt<4> a;
    int x = a::eval();
    std::cout << x << std::endl;
}

查看现场演示。

匿名用户

如果我正确理解你的问题,这就是你需要的:

template<int value>
struct ConstInt
{
    static int  eval()
    {
        return value; // This returns the const value of a template parameter
    };
};

然后,可以输入pedef:

typedef ConstInt<4> a;

您可以使用新的typedef-ed a,如下所示:

std::cout << a::eval();

它会将数字打印到您的屏幕上。

或者,您可以避免typedef。

std::cout << ConstInt<4>::eval();

匿名用户

这个程序只会返回作为退出值。

template <int value>
struct ConstInt
{
   static int eval()
   {
      return value;
   };
};

int main()
{
   typedef ConstInt<4> a;
   return a().eval() - a::eval();
}

在这里,是本地定义的,但它也在下一行以不同的方式使用了两次。