我有这个结构:
struct A { A(int a, bool b):a(a), b(b) {}; int a; bool b; }
我可以以某种方式声明具有特定参数的特定构造函数调用的类型声明吗?
我的意思是,像这样:
typedef A(2, false) A_2_false;
所以我可以使用如下:
const A a_func() { return A_2_false; };
它会提醒std::bind
您调用函数的位置,并且可以预先设置一些变量而不是std::place_holders
.
我试过用std::integral_constant
但没有运气.
我不想用 #define
谢谢
---更新---
我想要实现的目标:
我正在编写一个回调函数:
typedef std::function
一个简单的用户应该使用CbFunc
和返回const A
.我想让事情更简化,所以用户回调函数可以是:
const A userCbFunc() { ... ... // Good thing happend return A_2_false; ... ... // Bad thing happend return A(99, true); }
我想让Good thing happened
返回类型更简化,所以它将A_2_false
代替A(2, false)
.
然后,我在函数返回时使用struct成员.
只是一个简单的函数应该做的伎俩:
A A_2_false() { return A(2, false); }
用法:
A a_func() { return A_2_false(); }
即使这正式需要几份副本,所有副本都有资格进行复制,因此这些代码可以像原始代码一样有效地进行翻译.C++ 17甚至强制要求使用此副本.
如果从设计的角度来看这是有意义的,你也可以创建A_2_false
一个静态成员函数:A
A
struct A { static A two_false() { return A(2, false); } // ... }; A a_func() { return A::two_false(); }
这有时被称为"命名构造函数"成语.