gpt4 book ai didi

c++ - 创建从一种类型到另一种类型的别名

转载 作者:太空狗 更新时间:2023-10-29 22:56:56 25 4
gpt4 key购买 nike

我正在用 C++ 编写某种 DI 容器,我很好奇是否可以在现代 C++ 中创建从一种类型到另一种类型的别名。我基本上想做的是能够通过别名接口(interface)调用实现构造函数。像这样:

di::Register<Interface, Impl>();
di::Resolve<Interface>(); // -> Impl should be resolved

问题是到目前为止,我还没有找到在编译时给Interface 和Impl 起别名的方法。我可以使用 RTTI 做到这一点,但我真的不想使用它。有可能吗?

最佳答案

通过查看代码的界面,如果您有一个全局状态(我不积极推荐),您应该摆脱它:

using type_id_t = void(*)();
template<typename> void type_id() {}

struct di {
using create_function_t = void*(*)();
static std::unordered_map<type_id_t, create_function_t> types;

template<typename I, typename T>
static void Register() {
types.emplace(type_id<I>, []{
return static_cast<void*>(
static_cast<I*>(new T)
);
});
}

template<typename I>
static std::unique_ptr<I> Resolve() {
return std::unique_ptr<I>{static_cast<I*>(types[type_id<I>]())};
}
};

Live example

关于c++ - 创建从一种类型到另一种类型的别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46409901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com