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

Posted

技术标签:

【中文标题】具有对和静态函数的 C++ 模板【英文标题】:C++ template with pair and static function 【发布时间】:2016-02-04 01:25:48 【问题描述】:

在我的最后一次考试中,我必须编写一些代码来使 main 可编译。但是考试后我花了很多时间,我不知道应该在函数 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】:

这是一个棘手的问题。为了使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

【讨论】:

如果TestType::test_value是一个int typedef,你期望TestType(new int())怎么编译? @SamVarshavchik 构造函数采用void*,因此您可以将其他指针类型转换为它。 我只是在看到“new int()”这个表达式时产生了心理障碍。只是对调用“int”的构造函数有一个心理障碍。

以上是关于具有对和静态函数的 C++ 模板的主要内容,如果未能解决你的问题,请参考以下文章

C++模板,静态函数特化

C++使用模板类调用非静态成员函数

仅具有静态方法的模板类使用 .cpp 文件实现给出错误

c++八股之多态(持续更新)

C++:OpenMP 中的私有静态变量

C ++创建具有非静态成员函数的线程