加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何从函数类型自动推断返回类型?

发布时间:2020-12-16 09:35:35 所属栏目:百科 来源:网络整理
导读:我正在使用boost :: python来创建C库的 Python包装器.在某些时候,boost :: python需要一个指向成员函数(或兼容的东西)的指针,如: template class MyClass,typename ValueTypevoid (*setter_function)(MyClass,ValueType)// This doesn't compile,but you go
我正在使用boost :: python来创建C库的 Python包装器.在某些时候,boost :: python需要一个指向成员函数(或兼容的东西)的指针,如:

template <class MyClass,typename ValueType>
void (*setter_function)(MyClass&,ValueType)

// This doesn't compile,but you got the idea.
my_boost_python_call(setter_function f);

由于我正在包装的类具有以下形式的setter:

template <class MyClass,typename ValueType>
MyClass& (MyClass::*setter_method)(ValueType)

我写了一个“转换”功能:

template <typename MyClass,typename ValueType,setter_method<MyClass,ValueType> fluent_setter>
void nonfluent_setter(MyClass& instance,ValueType value)
{
  (instance.*fluent_setter)(value);
}

我可以这样使用:

class Foo
{
  public:

    Foo& bar(int value);
};

my_boost_python_call(nonfluent_setter<Foo,int,&Foo::bar>);

到目前为止,这种方法效果很好,但我想知道是否有办法让这更加“简单”(使用).

你觉得在某种程度上可能得到这样的东西:

// return type is somehow inferred from the member function pointer
my_boost_python_call(nonfluent_setter<Foo,&Foo::bar>);

// or even a syntax similar to boost::python::make_function
my_boost_python_call(make_nonfluent_setter<Foo>(&Foo::bar));

所有解决方案(甚至解释如何专门提升boost :: python来处理我的特定情况)都是受欢迎的.

谢谢.

解决方法

无法在C中自动推导返回类型,并且不能根据返回类型重载函数.

在C 0x中,有一个名为decltype的新功能可能会引起关注.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读