具有对和静态函数的 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++ 模板的主要内容,如果未能解决你的问题,请参考以下文章