gpt4 book ai didi

具有 const 限定符的自由函数类型的 C++ 特化

转载 作者:太空宇宙 更新时间:2023-11-04 11:29:37 25 4
gpt4 key购买 nike

让自由函数成为 const-quilified 是不可能的,但是以下特化是什么意思,何时适用?

template<typename _Res, typename... _ArgTypes>
struct _Weak_result_type_impl<_Res(_ArgTypes...) const>
{ typedef _Res result_type; };

我可以通过以下方式使用此特化:

typedef _Weak_result_type_impl<int () const>::result_type type;

但是什么函数类型是“int()const”。什么时候使用?

最佳答案

const 可用于(如 0x499602D2 所指)捕获 const 成员函数。

考虑以下示例:

#include <iostream>

using namespace std;

class foo
{
public:
void bar1() { cout << "bar1\n"; }
void bar2() const { cout << "bar2\n"; }
};

template <typename T, void (T::*mf)() const>
struct Test
{
void call(T & obj) { (obj.*mf)(); }
};

int main()
{
foo f;
//Test<foo, &foo::bar1> t; // Doesn't compile
//t.call(f);

Test<foo, &foo::bar2> t2;
t2.call(f);
return 0;
}

Test 模板只能捕获 const 成员函数(否则无法编译)。您可以很容易地想象基于成员函数常量性的特化,这可能就是您的代码正在做的事情(如果没有更多上下文就无法判断)


Live Demo

关于具有 const 限定符的自由函数类型的 C++ 特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25309900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com