在我上次的考试中,我必须编写一些代码来使主要内容可以编译。但是经过考试后我花了很多时间,而且我不知道应该在功能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;
}
答案 0 :(得分:0)
这是一个棘手的问题。为了new TestType::test_value()
进行编译,您需要TestType::test_value
为类型而不是函数。然后 new-expression 将创建该类型的对象,()
是该对象的初始化器。
TestType::test_value
的类型并不重要;例如,您可以使用int
。它只需要可以用()
初始化。
typedef int test_value;
但是,您将无法使用void
,引用类型或没有默认构造函数的类类型。你也不能使用cv限定类型,因为它的指针不能转换为void*
,这是调用ptr
构造函数所必需的。