gpt4 book ai didi

c++ - 应该如何使用 const/non-const 参数重载函数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:41:27 24 4
gpt4 key购买 nike

我有以下代码:

// string specializations
void foo(const char *a, const char *b);
void foo(const char *a, const std::string &b);
void foo(const std::string &a, const char *b);
void foo(const std::string &a, const std::string &b);

// generic implementation
template<typename TA, typename TB>
void foo(TA a, TA b)
{...}

问题是这个测试用例:

char test[] = "test";
foo("test", test);

最终调用了 foo 的模板化版本。显然,我可以通过各种非 const 参数的混合添加更多的重载,但我想知道:是否有更好的方法来重载 foo 以便它专用于所有 const 和非 const 字符串对?不需要我希望我没有错过参数类型的某些排列吗?

最佳答案

感谢 Mooing Duck 的建议,这是我的解决方案:

// string specialization
void foo(const std::string &a, const std::string &b);

template<typename TA, typename TB>
typename std::enable_if<
std::is_constructible<std::string, TA>::value &&
std::is_constructible<std::string, TB>::value
>::type foo(TA a, TB b)
{
foo(std::string(std::move(a)), std::string(std::move(b)));
}

// generic implementation
template<typename TA, typename TB>
typename std::enable_if<
!std::is_constructible<std::string, TA>::value ||
!std::is_constructible<std::string, TB>::value
>::type foo(TA a, TB b)
{...}

关于c++ - 应该如何使用 const/non-const 参数重载函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13390155/

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