Является ли moneypunct Object International?
Скажем, у меня есть шаблонная функция, которая принимает 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);
1 ответ
Решение
Если вы только хотите взять moneypunct
, это, безусловно, будет лучшим, ясным решением:
template <typename CharT, typename International = false>
void foo(const moneypunct<CharT, International>& bar);
Однако вы все равно можете определить оба аргумента шаблона из оригинала с чертой типа:
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;
}