c++ - 根据模板参数引用不同基类的函数

标签 c++ templates

#include <iostream>
using namespace std;

class c1 {
public:
    void f1() { std::cout << "In f1\n"; }
};

class c2 {
public:
    void f2() { std::cout << "In f2\n"; }
};

template<typename T>
class C: public c1, c2 {
public:
    void f() {

    };
};

int main() {
    C<c2> c;
    c.f();

    return 0;
}

有没有什么方法可以基于TC中的f函数映射到f1中的函数c1c2 中的f2?我不清楚当我使用 指向特定类时,f 函数如何用作 f1f2 的包装器>T

注意:我无法修改类 c1c2。它超出了我的范围。

最佳答案

您可以使用 constexpr if来自 C++17。例如

void f() {
    if constexpr (std::is_same_v<T, c1>)
        f1();
    else
        f2();
}

LIVE

请注意,constexpr if 是在编译时求值的,正如@skypjack 评论的那样,对于这种情况,在运行时求值也很好。所以下面的代码也能正常工作:

void f() {
    if (std::is_same_v<T, c1>)
        f1();
    else
        f2();
}

关于c++ - 根据模板参数引用不同基类的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45854027/

相关文章:

c# - 无法使用/调试来自 C# 的非托管 DLL

C++ Hooking kernel32.dll OpenProcess 走弯路

c++ - 在模板中存储类成员函数

c++ - 如何将工厂模式与仿函数一起使用?

C++ 模板隐式使用

C++ TCP Socket客户端发送数据失败

c++ - 内存中变量之间的距离

c++ - 如何调试 "Invalid parameter passed to C runtime function"?

c++ - 如何编码和重载返回自身的函数? C++17

c++ - 带有模板化参数的偏特化函数模板