gpt4 book ai didi

c++ - 模板函数中的条件代码生成

转载 作者:行者123 更新时间:2023-11-30 02:29:35 27 4
gpt4 key购买 nike

我正在尝试编写一个在这两种情况下都能正常工作的模板函数。我有两个功能:

template <typename T>
Check(T&)

template <typename U, typename V>
Check(U&, V&)

我有一个函数,我想编写它的单个实现,如果是除一对以外的任何其他类型,我希望它调用 Check(T&),如果我们有一个 std::pair,那么它应该调用 Check 的两个参数变体。换句话说,代码如下:

void SomeFunction() {
...
if (type(x) is std::pair<U,V>)
Check(x.first, x.second);
else
Check(x);
...
}

是否有某种方法可以使用模板魔术来完成此行为?该代码最好与 C++11 一起使用。我拥有 Check 函数的代码,它们在类内部,因此我可以在必要时调整它们的界面。

最佳答案

你的意思是这样的吗?它提供了仅适用于对的重载并调用 2 参数函数。

#include <iostream>
#include <utility>

template <typename T>
void Check(T& t)
{
std::cout << "single argument version " << t << '\n';
}

template <typename U, typename V>
void Check(U& u, V& v)
{
std::cout << "pair version " << u << " and " << v << '\n';
}

template<typename T>
void call(T& t)
{
Check(t);
}

template<typename T, typename U>
void call(const std::pair<T, U>& t)
{
Check(t.first, t.second);
}

int main()
{
int i = 1;

call(i);
call(std::pair<int, char>(2, 'c'));
}

关于c++ - 模板函数中的条件代码生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39323919/

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