gpt4 book ai didi

c++ - 使用模板将类方法绑定(bind)到特定原型(prototype)

转载 作者:行者123 更新时间:2023-11-28 06:18:16 24 4
gpt4 key购买 nike

我正在寻找一种将函数和类方法绑定(bind)到特定原型(prototype)的方法。

假设我想用这个原型(prototype)绑定(bind)函数和类方法

int (float)

这个

void ()

这是我的代码

class Toto
{
public:
int test(float f) { std::cout << "Toto::test " << f << std::endl; return 0; }
} toto;

int test(float f)
{
std::cout << "test " << f << std::endl;
return 0;
}

template <typename T, T t>
void func()
{
t(4.0f);
}

template <typename T>
void func<int (T::*)(float), int (T::*method)(float)>()
{
toto::*method(5.0f);
}

auto main(int, char**) -> int
{
func<int(*)(float), &test>();
func<void (Toto::*)(float), &Toto::test>();

return EXIT_SUCCESS;

函数绑定(bind)工作正常,但方法一似乎有一些我不明白的语法问题。 g++ 给我这个错误:

src/main.cpp:28:6: error: parse error in template argument list
src/main.cpp:28:55: error: function template partial specialization ‘func<int (T::*)(float), <expression error> >’ is not allowed

有什么想法吗?

最佳答案

你不能部分特化模板函数,但你可以为类/结构:

namespace details
{
template <typename T, T t>
struct func_impl
{
void operator () () const { t(4.0f); }
};

template <typename T, int (T::*method)(float)>
struct func_impl<int (T::*)(float), method>
{
void operator () () const { (toto.*method)(5.0f); }
};

}

template <typename T, T t>
void func()
{
details::func_impl<T, t>{}();
}

Live demo

关于c++ - 使用模板将类方法绑定(bind)到特定原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29816820/

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