gpt4 book ai didi

C++如何区分容器模板和 native 类型

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

我有以下问题:

template<class T>
void set(std::string path, const T data)
{
stringstream ss;
ss << data << std::endl;
write(path, ss.str();
}

template<class T>
void set(std::string path, const T data)
{
std::stringstream ss;
for(typename T::const_iterator it = data.begin(); it < data.end(); ++it)
{
ss << *it;
if(it < data.end() -1 )
ss << ", ";
}
ss << std::endl;
write(path, ss.str());
}

我收到以下错误:

error: ‘template<class T> void myclass::set(std::string, T)’ cannot be overloaded
error: with ‘template<class T> void myclass::set(std::string, T)’

有没有办法在模板中区分容器类型和其他类型?

最佳答案

使用特征:

#include <type_traits>

template <typename T>
typename std::enable_if<is_container<T>::value>::type
set (std::string const & path, T const & container)
{
// for (auto const & x : container) // ...
}


template <typename T>
typename std::enable_if<!is_container<T>::value>::type
set (std::string const & path, T const & data)
{
std::ostringstream oss;
oss << data;
write(path, oss.str());
}

您可以在 pretty printer code 中找到合适的特征.

关于C++如何区分容器模板和 native 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11557729/

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