模板参数的格式规范 我有一个C++类,它被模板化为整数类型;类似于 template<typename int_type> void myClass(int_type a) { // [...] }
但这似乎不是处理事情的最佳方式模板参数的格式规范 我有一个C++类,它被模板化为整数类型;类似于 template<typename int_type> void myClass(int_type a) { // [...] },c++,templates,format-specifiers,C++,Templates,Format Specifiers,但这似乎不是处理事情的最佳方式 还有其他建议吗?您可以使用一个类和专门化: template <typename T> struct scanf_format; template <> struct scanf_format<int> { static constexpr const char* format = "%d"; static constexpr const char* format2 = "%d %d"; }; templat
还有其他建议吗?您可以使用一个类和专门化:
template <typename T> struct scanf_format;
template <> struct scanf_format<int>
{
static constexpr const char* format = "%d";
static constexpr const char* format2 = "%d %d";
};
template <> struct scanf_format<long long>
{
static constexpr const char* format = "%lld";
static constexpr const char* format2 = "%lld %lld";
};
可能最好使用
运算符sizeof(int)=sizeof(unsigned int)
的模板版本,但是%d
不是unsigned int
的正确格式说明符(例如,考虑int\u MAX
和UINT\u MAX
之间的数字)。要为不同类型提供不同的实现,函数重载通常是一种好方法。
template <typename T> struct scanf_format;
template <> struct scanf_format<int>
{
static constexpr const char* format = "%d";
static constexpr const char* format2 = "%d %d";
};
template <> struct scanf_format<long long>
{
static constexpr const char* format = "%lld";
static constexpr const char* format2 = "%lld %lld";
};
template <typename T>
void my_scanf(const char* buffer, T&a, T&b)
{
sscanf(buffer, scanf_format<T>::format2, &a, &b);
}
template <typename T>
void my_scanf2(const char* buffer, T&a, T&b)
{
std::stringstream ss(buffer);
ss >> a >> b;
}