是国际货币基金组织

Is moneypunct Object International?

本文关键字:基金组织 货币      更新时间:2023-10-16

假设我有一个模板化的函数,它接受一个moneypunct:

template <typename T>
void foo(const T& bar);

我可以使用typename T:char_type来确定第一个moneypunct模板参数(无论我是在处理moneypunct<char>还是moneypunct<wchar_t>。)但是我如何确定第二个模板参数是true还是false (moneypunct<char, true>moneypunct<char, false> ?)

是实现这一目标的唯一方法是将我的函数重新设计为:

template <typename CharT, typename International = false>
void foo(const moneypunct<CharT, International>& bar);

如果你只想要一个moneypunct,这绝对是最好的,最清晰的解决方案:

template <typename CharT, typename International = false>
void foo(const moneypunct<CharT, International>& bar);

然而,你仍然可以用一个类型trait从原始模板中确定两个模板参数:

template <typename> struct isInternational;
template <typename CharT, bool International>
struct isInternational<std::moneypunct<CharT, International>>
: std::integral_constant<bool, International>
{ }

可以使用:

template <typename T>
void foo(const T& bar) {
    // this won't compile if T is not a std::moneypunct
    std::cout << isInternational<T>::value << std::endl;
}