带有对和静态函数的C ++模板

时间:2016-02-04 01:25:48

标签: c++ templates stl

在我上次的考试中,我必须编写一些代码来使主要内容可以编译。但是经过考试后我花了很多时间,而且我不知道应该在功能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;
}

1 个答案:

答案 0 :(得分:0)

这是一个棘手的问题。为了new TestType::test_value()进行编译,您需要TestType::test_value类型而不是函数。然后 new-expression 将创建该类型的对象,()是该对象的初始化器。

TestType::test_value的类型并不重要;例如,您可以使用int。它只需要可以用()初始化。

typedef int test_value;

但是,您将无法使用void,引用类型或没有默认构造函数的类类型。你也不能使用cv限定类型,因为它的指针不能转换为void*,这是调用ptr构造函数所必需的。

http://coliru.stacked-crooked.com/a/781cf8f871f6f1a7