有没有办法将指定不同类的 std::make_unique 传递到函数中
Is there a way to pass std::make_unique with different classes specified into a function
所以我有这个示例代码。这里总共使用了 4 个类似银行账户的类,其中 Account 是抽象基类。支票账户和储蓄账户派生自账户抽象类,信托账户派生自储蓄账户。我不会在这里详细介绍类的内部工作原理,因为它对问题没有意义。我想使用try
和catch
以及从包含异常警告的std::exception
派生的类来实现简单的异常处理。我可以编写一个函数来为 n 个对象执行此操作,但前提是它们是 Account 的相同子类。但是,我想向向量添加 3 个不同的子类,但我想不出自动化它的方法。
#include <iostream>
#include <memory>
#include <vector>
#include "checking_account.h"
#include "trust_account.h"
#include "account_util.h"
int main() {
std::vector<std::unique_ptr<Account>> accounts{}; //A vector of unique_ptr to Account objects that I will be adding new Objects to
std::unique_ptr<Account>
try {
accounts.push_back(std::make_unique<CheckingAccount>("Joe", 200));
}
catch (const std::exception &ex) {
std::cout << ex.what() << std::endl;
}
try {
accounts.push_back(std::make_unique<TrustAccount>("John", -300, 0.1));
}
catch (const std::exception &ex) {
std::cout << ex.what() << std::endl;
}
try {
accounts.push_back(std::make_unique<SavingsAccount>("Jane", 150, 0.2));
}
catch (const std::exception &ex) {
std::cout << ex.what() << std::endl;
}
return 0;
}
我想让函数看起来像那样
void create_account(std::vector<std::unique_ptr<Account>> &accounts, CLASS, CLASS_ARGS) {
try {
accounts.push_back(std::make_unique<CLASS>(CLASS_ARGS));
}
catch (const std::exception &ex) {
std::cout << ex.what() << std::endl;
}
}
但我现在知道这怎么可能看起来了。 有没有办法创建指向类的指针?(一个类而不是一个类的对象,我认为有一种方法可以制作一个指向函数的指针并将其作为参数传递,但我也不知道它是如何工作的(。
使create_account()
成为一个模板化函数,例如:
template<typename T, typename... ArgTypes>
void create_account(std::vector<std::unique_ptr<Account>> &accounts, ArgTypes&&... args)
{
try {
accounts.push_back(std::make_unique<T>(std::forward<ArgTypes>(args)...));
}
catch (const std::exception &ex) {
std::cout << ex.what() << std::endl;
}
}
int main() {
std::vector<std::unique_ptr<Account>> accounts;
create_account<CheckingAccount>(accounts, "Joe", 200);
create_account<TrustAccount>(accounts, "John", -300, 0.1);
create_account<SavingsAccount>(accounts, "Jane", 150, 0.2);
return 0;
}
相关文章:
- 为什么 std::unique 不调用 std::sort?
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- make 命令如何避免重新编译未更改的源文件?
- MAKE:找不到包含的用户定义的头文件?
- 'make check' GLIBC 运行时的链接问题
- 生成"unique"矩阵
- Qt5 [make -snap] 无法正确编译:进程"/usr/bin/snap"代码 1 退出
- mingw32-make 使用"MinGW Makefiles"生成器跟踪 CMAKE 无法将可执行文件链接到对象库
- 我对 std::unique(算法)C++有问题
- make 命令创建 .file,但不创建应用程序文件
- 如何摆脱导入的 make 项目中的 Eclipse 索引器"Type std::... could not be resolved"错误
- Qt Creator 在执行步骤 "make" 时出现编译错误,-fno-stack-limit
- 如何使用MySQL Connector and Make设置C++项目
- 使用 make 将对象文件放在特定目录中
- 我是 C++ 的新手,我试图调用 make 一个以 2 个类作为其参数的类构造函数
- "Make"失败并出现 Clang 错误 - 如何从 Clang 获得错误?
- 防止 GNU Make 在每次构建时生成 protobuf 代码
- Make zmqpp::socket::connect a std::future
- 链接从命令行转换为Make的库