目前我正在学习模板和结构。我需要执行以下任务:
使用静态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'为本地定义但未使用
我得到一个错误,但我不确定这个尝试是否实际上是有益的,以便完成任务。
我得到一个错误,但我不确定这个尝试是否实际上是有益的,以便完成任务。
您得到的错误有点误导您代码的正确性。
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();
}
在这里,