首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >可选模板参数组合

可选模板参数组合
EN

Stack Overflow用户
提问于 2021-11-09 20:18:52
回答 1查看 54关注 0票数 0

我有一组模板专门化(C++11),它使用下面的基本模板,其中同时存在tPayLoad和tReturnType:

template <class tDerivedOperation, class tBridgeType, class tPayLoadType = void, class tReturnType = void> class OperationT ...

第一个专门化是在没有tPayLoadType或tReturnType的情况下。

template <class tDerivedOperation, class tBridgeType> class OperationT<tDerivedOperation, tBridgeType, void, void> ...

第二个专门化是当只有tPayLoadType时。

template <class tDerivedOperation, class tBridgeType, class tPayLoadType> class OperationT<tDerivedOperation, tBridgeType, tPayLoadType, void> ...

最后,我想要第三种情况(第四种组合),没有tPayLoadType,只有一个tReturnType,这就是问题出现的地方。我不能用(我想):

template <class tDerivedOperation, class tBridgeType, class tReturnType> class OperationT<tDerivedOperation, tBridgeType, void, tReturnType> ...

因为这在本质上和专门化是一样的。如果可能的话,有谁知道怎么做呢?

/N

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-09 21:03:48

以下是

代码语言:javascript
运行
复制
#include <iostream>
template<class tDerivedOperation, class tBridgeType, class tPayLoadType = void, class tReturnType = void>
struct OperationT {
    static constexpr auto overload = "base";
};

template<class tDerivedOperation, class tBridgeType>
struct OperationT<tDerivedOperation, tBridgeType, void, void> {
    static constexpr auto overload = "both void";
};

template<class tDerivedOperation, class tBridgeType, class tPayLoadType>
struct OperationT<tDerivedOperation, tBridgeType, tPayLoadType, void> {
    static constexpr auto overload = "back void";
};

template<class tDerivedOperation, class tBridgeType, class tReturnType>
struct OperationT<tDerivedOperation, tBridgeType, void, tReturnType> {
    static constexpr auto overload = "front void";
};

int main() {
    std::cout << OperationT<int, int>::overload << '\n';
    std::cout << OperationT<int, int, int>::overload << '\n';
    std::cout << OperationT<int, int, void, int>::overload << '\n';
    std::cout << OperationT<int, int, int, int>::overload << '\n';
}

给出输出

代码语言:javascript
运行
复制
both void
back void
front void
base

就像你所期望的那样。这能回答你的问题吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69904573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档