草庐IT

C++ 函数类型

我在理解函数类型时遇到问题(例如,它们显示为std::function的Signature模板参数):typedefintSignature(int);//thesignatureinquestiontypedefstd::functionstd_fun_1;typedefstd::functionstd_fun_2;static_assert(std::is_same::value,"Theyarethesame,cool.");intsquare(intx){returnx*x;}Signature*pf=square;//pfisafunctionpointer,easySign

c++ - 我们可以在声明中的任何位置放置 "typedef"说明符吗?

这个问题在这里已经有了答案:Whatisthemeaningof`structXtypedef`vs.`typedefstructX`?(5个回答)关闭5年前。typedef说明符的语法:typedef例如:typedeflongunsignedintInt;一切正常。但是,如果我将typedef放在声明中的任何位置,就像这样:longunsignedtypedefintInt;然后,它也可以正常工作。为什么?我们可以将typedef放在声明中的任何位置吗? 最佳答案 首先,引自§6.11.5,“future的语言方向”1Thepl

c++ - 我们可以在声明中的任何位置放置 "typedef"说明符吗?

这个问题在这里已经有了答案:Whatisthemeaningof`structXtypedef`vs.`typedefstructX`?(5个回答)关闭5年前。typedef说明符的语法:typedef例如:typedeflongunsignedintInt;一切正常。但是,如果我将typedef放在声明中的任何位置,就像这样:longunsignedtypedefintInt;然后,它也可以正常工作。为什么?我们可以将typedef放在声明中的任何位置吗? 最佳答案 首先,引自§6.11.5,“future的语言方向”1Thepl

c++ - 函数模板的 typedef 的最佳替代方案?

我想做的是这样的:templateDataTypemyFunc(DataTypein){...}typedefmyFuncmyFunc_i;myFunc_i(37);...但是,typedef不能用于C++中的此类函数。我想知道的是......在这种情况下人们的首选替代方案是什么?我能想到的只有:1)处理它,并且总是使用myFunc语法2)手动创建一个包装函数,即inlineintmyFunc_i(intin){returnmyFunc(in);}这可行,但缺点是需要额外维护,并且可能会不同步(即,如果您更改myFunc的函数签名)。想法? 最佳答案

c++ - 函数模板的 typedef 的最佳替代方案?

我想做的是这样的:templateDataTypemyFunc(DataTypein){...}typedefmyFuncmyFunc_i;myFunc_i(37);...但是,typedef不能用于C++中的此类函数。我想知道的是......在这种情况下人们的首选替代方案是什么?我能想到的只有:1)处理它,并且总是使用myFunc语法2)手动创建一个包装函数,即inlineintmyFunc_i(intin){returnmyFunc(in);}这可行,但缺点是需要额外维护,并且可能会不同步(即,如果您更改myFunc的函数签名)。想法? 最佳答案

c++ - 为什么我不能通过 typedef 声明 friend ?

有谁知道为什么类名的typedef不像friend声明的类名那样工作?classA{public:};classB:publicA{public:typedefASUPERCLASS;};typedefAX;classC{public:friendclassA;//OKfriendclassX;//failsfriendclassB::SUPERCLASS;//fails}; 最佳答案 目前不能。我还不知道原因(只是查找它,因为我觉得它很有趣)。更新:您可以在第一个提案中找到支持typedef-names作为好友的原因:http:/

c++ - 为什么我不能通过 typedef 声明 friend ?

有谁知道为什么类名的typedef不像friend声明的类名那样工作?classA{public:};classB:publicA{public:typedefASUPERCLASS;};typedefAX;classC{public:friendclassA;//OKfriendclassX;//failsfriendclassB::SUPERCLASS;//fails}; 最佳答案 目前不能。我还不知道原因(只是查找它,因为我觉得它很有趣)。更新:您可以在第一个提案中找到支持typedef-names作为好友的原因:http:/

c++ - typedef 改变含义

当我用g++编译以下代码片段时templateclassA{};templateclassB{public:typedefAA;};编译器告诉我error:declarationof‘typedefclassAB::A’error:changesmeaningof‘A’from‘classA’另一方面,如果我将typedef更改为typedef::AA;使用g++一切都可以正常编译。Clang++3.1不关心任何一种方式。为什么会这样?第二个行为标准是什么? 最佳答案 g++是正确的并且符合标准。来自[3.3.7/1]:AnameN

c++ - typedef 改变含义

当我用g++编译以下代码片段时templateclassA{};templateclassB{public:typedefAA;};编译器告诉我error:declarationof‘typedefclassAB::A’error:changesmeaningof‘A’from‘classA’另一方面,如果我将typedef更改为typedef::AA;使用g++一切都可以正常编译。Clang++3.1不关心任何一种方式。为什么会这样?第二个行为标准是什么? 最佳答案 g++是正确的并且符合标准。来自[3.3.7/1]:AnameN

c++ - 如何从模板类 typedef 方法的返回类型?

我有一个模板类Helper看起来像这样:templateclassHelper{public:usingmappedType=...;};我需要mappedType为map(constint&)返回的类型Mapper中的方法类(class)。给定Mapper的有效类型像下面这样:classDMapper{public:doublemap(constint&val){...}};Helper::mappedType应该是double.有没有办法在不实例化Mapper的情况下做到这一点??我得到的最接近的是:usingmappedType=typenamestd::result_of::t