我知道标记为的构造函数将尽可能=default"尝试" noexcept.但是,如果我在类之外定义它,它就noexcept不再存在了,正如您可以从此代码中看到的那样:
#include <iostream>
#include <utility>
#include <type_traits>
struct Bar
{
Bar() = default;
Bar(Bar&&) = default; // noexcept
};
struct Foo
{
Foo() = default;
Foo(Foo&&);
};
// moving the definition outside makes it noexcept(false)
Foo::Foo(Foo&&) = default; // not noexcept anymore
int main()
{
Foo foo;
Bar bar;
std::cout << std::boolalpha;
// checks
std::cout << std::is_nothrow_move_constructible<Bar>::value << std::endl;
std::cout << std::is_nothrow_move_constructible<Foo>::value << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
如何=default在类外部定义这样的构造函数并制作它noexcept?为什么这样的构造函数noexcept(false)在类外定义?通过智能指针实现 …
我想知道我是否可以拆分C ++类声明
原班
class P
{
private:
int id;
//some really secret method
int secretMethod();
protected:
int x;
public:
P();
int getX();
};
Run Code Online (Sandbox Code Playgroud)
我只想在.h中显示public和protected方法和属性,并在其他地方声明private,而类的用户看不到它。
想要的类声明:
class P
{
protected:
int x;
public:
P();
int getX();
};
Run Code Online (Sandbox Code Playgroud)
编辑:我想要的是:
我对更高级的 C++ 功能还比较陌生......所以请记住这一点;)
我最近为某个类定义了一个接口,当然,仅包含纯虚函数。
然后,我在单独的文件中实现了该接口的特定版本。
问题是......我如何在用户端调用该接口的特定实现,而不透露该特定实现的内部结构?
因此,如果我有一个如下所示的 Interface.h 头文件:
class Interface
{
public:
Interface(){};
virtual ~Interface(){};
virtual void InterfaceMethod() = 0;
}
Run Code Online (Sandbox Code Playgroud)
然后,一个特定的Implementation.h头文件如下所示:
class Implementation : public Interface
{
public:
Implementation(){};
virtual ~Implementation(){};
void InterfaceMethod();
void ImplementationSpecificMethod();
}
Run Code Online (Sandbox Code Playgroud)
最后,在 main 下,我有:
int main()
{
Interface *pInterface = new Implementation();
// some code
delete pInterface;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做这样的事情,而不透露“main”中Implementation.h的细节?难道就没有办法告诉“main”吗……嘿,“实现”只是“接口”的一种;并将其他所有内容保存在单独的库中?
我知道这一定是一个重复的问题......但我找不到明确的答案。
谢谢您的帮助!
我的 C++ 软件使用另一个收集常见类/函数的存储库。很多时候,我的软件只使用一个头文件中提供的几个相关类之一。假设外部存储库有一个文件“data_types.h”,包含三个类。
class X { // definition }
class Y { // definition }
class Z { // definition }
Run Code Online (Sandbox Code Playgroud)
我的项目使用class Y来自标题。当发布给客户时,我需要包含我的 lib 文件以及 this 的定义class Y。如何向客户隐藏 X 类和 Z 类(因为它们未在我的项目中使用)?
有某种包装方法可以推荐吗?
最近我遇到了一个包含私有唯一指针成员变量的类。在构造函数中它用 make_unique 初始化,在析构函数中用 reset 清除。我知道 make_unique 执行堆分配。这种开销有什么原因吗?为什么不使用“普通”成员变量。