Mad*_*den 0 c++ polymorphism template-meta-programming c++17
我有一对类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);
}
Run Code Online (Sandbox Code Playgroud)
双方func_1并func_2应模板,可能会进行一些SFINAE以确保呼叫类型从S.衍生然后你只需做if constexpr(std::is_same<std::decay_t<T>, FS>::value)和实施不同类别不同的行为.
如果将基类指针传递给方法,那么我相信在编译时无法检索派生类型.
| 归档时间: |
|
| 查看次数: |
110 次 |
| 最近记录: |