gpt4 book ai didi

c++ - 是否有一种模式可以命名管理邪恶的 static_casts

转载 作者:搜寻专家 更新时间:2023-10-31 01:23:39 25 4
gpt4 key购买 nike

以下代码是我用于事件分派(dispatch)的简化版本。要点是在模板仿函数的参数上有一个 static_cast 并且另一个类使确保传递给仿函数的参数是 static_cast 强制转换的对象。

struct AbstractArg {
virtual ~AbstractArg() { }
};

struct AbstractFunctor {
virtual void operator()(AbstractArg*) const = 0;
virtual ~AbstractFunctor() { }
};


namespace evil {

template<typename ArgT>
struct CastingFunctor : AbstractFunctor {
void operator()(AbstractArg* aarg) const
{
ArgT* arg = static_cast<ArgT*>(arg); // Danger!
// ... do stuff with it
}
};

} // namespace evil


class TypeidManager
{
public:
typedef std::map<std::string, AbstractFunctor*> map_type;

void dispatch(AbstractArg* arg) const
{
map_type::const_iterator it = typeid_map.find(std::string(typeid(*arg).name()));
if (it != typeid_map.end())
{
AbstractFunctor* pFunctor = it->second;
(*pFunctor)(arg);
}
};

template<typename ArgT>
void register_func( void (*fun_ptr)(ArgT*))
{
typeid_map.insert(std::make_pair(std::string(typeid(ArgT).name()),
new evil::CastingFunctor<ArgT>));
}

private:
map_type typeid_map;
};

这个模式有名字吗?

谢谢!

最佳答案

这不是反模式,它是一种非常有用的技术,经常与类型删除一起使用。

关于c++ - 是否有一种模式可以命名管理邪恶的 static_casts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1059024/

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