gpt4 book ai didi

c++ - 基于派生类型的编译时行为分支

转载 作者:太空宇宙 更新时间:2023-11-04 14:52:21 24 4
gpt4 key购买 nike

我有一对类 FS 和 DS,它们都派生自另一个类 S。我有一个函数,我传入一个 S*(即 FS 或 DS),它进一步调用另一个传入同一个 S 的函数*。在这个最后的函数中,我需要根据 S 是 FS 还是 DS 有不同的行为,但我更愿意在编译时解析这个分支,因为它在关键路径上。我怎样才能做到这一点?我觉得涉及元编程和/或 constexpr 的东西 - 我不想为每次传递进行虚拟调用

为了简洁省略了多余的细节

class S {};
class FS : public S {};
class DS : public S {};

void func_2(Space *s) {
// common code
// branch based on lowest type of s
// common code
}

void func_1(Space *s) {
// common code
func_2(s);
}

最佳答案

两者都是 func_1func_2应该是模板化的,可能有一些 SFINAE 以确保调用类型是从 S 派生的。然后你只需做 if constexpr(std::is_same<std::decay_t<T>, FS>::value)并为不同的类实现不同的行为。
如果您将基类指针传递给方法,那么我相信没有办法在编译时检索派生类型。

关于c++ - 基于派生类型的编译时行为分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52094593/

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