gpt4 book ai didi

c++ - 具有两个以上参数的 Variadic 模板函数

转载 作者:可可西里 更新时间:2023-11-01 18:29:13 24 4
gpt4 key购买 nike

我有以下示例,其中使用了两个参数 t1 和 t2。

template<typename T>
bool Compare(T t1, T t2)
{
return t1 == t2;
}

template<typename T, typename... Args>
bool Compare(T t1, T t2, Args... args)
{
return (t1 == t2) && Compare(args...);
}

int main(void)
{
Compare(1, 1, "string", "string");
}

函数比较采用相同类型且可以比较的成对参数。比较两对,然后递归传递参数包,直到达到最后两个参数。为了停止递归,我使用了不带参数包的 Compare 函数的实现。

我想添加第三个参数 t3 所以函数 Compare 应该是这样的:

template<typename T>
bool Compare(T t1, T t2, T t3)
{
return t1 == t2 == t3;
}

template<typename T, typename... Args>
bool Compare(T t1, T t2, T t3, Args... args)
{
return (t1 == t2 == t3) && Compare(args...);
}

int main(void)
{
Compare(1, 1, 1, "string", "string", "string");
}

我希望此函数采用三个参数进行比较,然后递归处理接下来的三个参数。当我尝试编译此代码时,出现以下错误:

>xxx\source.cpp(4): error C2446: '==': no conversion from 'const char *' to 'int'
1> xxx\source.cpp(4): note: There is no context in which this conversion is possible
1> xxx\source.cpp(10): note: see reference to function template instantiation 'bool Compare<const char*>(T,T,T)' being compiled
1> with
1> [
1> T=const char *
1> ]
1> xxx\source.cpp(15): note: see reference to function template instantiation 'bool Compare<int,const char*,const char*,const char*>(T,T,T,const char *,const char *,const char *)' being compiled
1> with
1> [
1> T=int
1> ]
1>xxx\source.cpp(4): error C2040: '==': 'int' differs in levels of indirection from 'const char *'

如何实现比较相同类型的三个参数集合的功能?

最佳答案

t1 == t2 == t3

这不会检查 t1t2t3 是否都相等,它会检查 t1等于 t2,然后检查生成的 bool 是否等于 t3

也许你想要的是(假设合理的相等运算符):

t1 == t2 && t1 == t3

所以你的代码应该是这样的:

template<typename T>
bool Compare(T t1, T t2, T t3)
{
return t1 == t2 && t1 == t3;
}

template<typename T, typename... Args>
bool Compare(T t1, T t2, T t3, Args... args)
{
return t1 == t2 && t1 == t3 && Compare(args...);
}

请注意,您使用字符串文字进行的测试调用会进行指针比较,这可能不是您想要的。

关于c++ - 具有两个以上参数的 Variadic 模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36005990/

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