在我上次的考试中,我必须编写一些代码来使主要内容可以编译。但是经过考试后我花了很多时间,我不知道应该将什么添加到函数test_value中。我知道,test_value应该是静态的,但我不知道我想要返回什么。
任何人都可以给我提示如何解决这个问题?
#include <utility>
#include <iostream>
typedef int Int;
template <typename T>
class ptr
{
public:
T val;
ptr(void* a){}
static T test_value(){
//what exactly should be there?
}
};
int main(int argc, char const *argv[])
{
std::pair<int,int>* a = new std::pair<int,int>;
std::cout<<a->first;
typedef ptr<std::pair<Int,Int> > TestType;
TestType t1 = TestType(new TestType::test_value());
return 0;
}
这是一个棘手的问题。为了编译new TestType::test_value()
,你需要TestType::test_value
作为一个类型而不是一个函数。然后new-expression将创建该类型的对象,()
是该对象的初始化器。
TestType::test_value
是什么类型并不重要;你可以用int
为例。它只需要是可以用()
初始化的东西。
typedef int test_value;
但是,您将无法使用void
,引用类型或没有默认构造函数的类类型。您也无法使用cv限定类型,因为无法将指向它的指针转换为void*
,这对于调用ptr
构造函数是必需的。