当前位置:  开发笔记 > 编程语言 > 正文

使用特定参数键入特定构造函数的声明

如何解决《使用特定参数键入特定构造函数的声明》经验,为你挑选了1个好方法。

我有这个结构:

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
一个简单的用户应该使用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成员.



1> Kerrek SB..:

只是一个简单的函数应该做的伎俩:

A A_2_false() { return A(2, false); }

用法:

A a_func()
{
    return A_2_false();
}

即使这正式需要几份副本,所有副本都有资格进行复制,因此这些代码可以像原始代码一样有效地进行翻译.C++ 17甚至强制要求使用此副本.

如果从设计的角度来看这是有意义的,你也可以创建A_2_false一个静态成员函数:AA

struct A
{
    static A two_false() { return A(2, false); }

    // ...
};


A a_func()
{
    return A::two_false();
}

这有时被称为"命名构造函数"成语.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有