gpt4 book ai didi

c++ - 如何将 const 成员函数作为非常量成员函数传递

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:24 24 4
gpt4 key购买 nike

如何将常量成员函数作为非常量成员函数传递给模板?

class TestA 
{
public:
void A() {
}

void B() const {
}
};

template<typename T, typename R, typename... Args>
void regFunc(R(T::*func)(Args...))
{}

void test()
{
regFunc(&TestA::A); // OK
regFunc(&TestA::B); // ambiguous
}

不想添加类似:

void regFunc(R(T::*func)(Args...) const)

有没有更好的办法?

最佳答案

为什么不简单地将它传递给通用模板函数:

see live

#include <iostream>
#include <utility>

class TestA
{
public:
void A() { std::cout << "non-cost\n"; }
void B() const { std::cout << "cost with no args\n"; }
void B2(int a) const { std::cout << "cost with one arg\n"; }
const void B3(int a, float f) const { std::cout << "cost with args\n"; }
};
template<class Class, typename fType, typename... Args>
void regFunc(fType member_fun, Args&&... args)
{
Class Obj{};
(Obj.*member_fun)(std::forward<Args>(args)...);
}

void test()
{
regFunc<TestA>(&TestA::A); // OK
regFunc<TestA>(&TestA::B); // OK
regFunc<TestA>(&TestA::B2, 1); // OK
regFunc<TestA>(&TestA::B3, 1, 2.02f); // OK
}

输出:

non-cost
cost with no args
cost with one arg: 1
cost with args: 1 2.02

关于c++ - 如何将 const 成员函数作为非常量成员函数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53596067/

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