gpt4 book ai didi

c++ - 为模板化( Armadillo )类专门化模板化函数

转载 作者:太空宇宙 更新时间:2023-11-04 13:47:36 26 4
gpt4 key购买 nike

我正在尝试组合一个非常简单的日志记录类,它专门处理某些类型,尤其是 vector 。我想在使用 << 时有默认行为运营商,但在某些情况下修改它。设置是:

class LoggerStream
{
template <typename ArgType>
LoggerStream & operator<< (const ArgType &arg)
{
// Standard logging logic
return *this;
}

template <typename DataType>
LoggerStream & operator<< (const std::vector<DataType> &arg)
{
// Specialised logging logic
return *this;
}

template <typename DataType>
LoggerStream & operator<< (const arma::Col<DataType> &arg)
{
// Specialised logging logic
return *this;
}

LoggerStream & operator<< (const double &arg)
{
// Specialised logging logic
return *this;
}

// Other stuff...
};

double案例工作正常。问题是对于 vector 类型的子类,通用模板似乎优先,更具体的模板被忽略。

由于所有三个模板化案例都只有一个通用模板参数,我猜 vector 案例不被认为是最专业的,但如果它被认为是模棱两可的,我预计会出现编译器错误。 (它编译得很好。)那么我如何指示一个特化但仍然概括 vector 元素的类型?提前致谢。

我猜这与 Col 的一些细节有关类被实现。我正在使用(和别名) arma::Col<T>::fixed<N>同样,但是为此编写特定的重载似乎无济于事。欢迎任何想法。

最佳答案

我无法复制它。此代码按预期工作:

#include <iostream>
#include <vector>

using namespace std;

class LoggerStream
{
public:
template <typename ArgType>
LoggerStream &operator<< (const ArgType &arg)
{
// Standard logging logic
cout << "In general" << endl;
return *this;
}

template <typename DataType>
LoggerStream &operator<< (const std::vector<DataType> &arg)
{
// Specialised logging logic
cout << "In vector" << endl;

return *this;
}

};

int main()
{
LoggerStream foo;
vector<int> v;
foo << v; // calling the vector specialization
}

关于c++ - 为模板化( Armadillo )类专门化模板化函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25203346/

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