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

问题描述 投票:0回答:1

在我上次的考试中,我必须编写一些代码来使主要内容可以编译。但是经过考试后我花了很多时间,我不知道应该将什么添加到函数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;
}
c++ templates stl
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.