我有一个以整数类型为模板的 C++ 类;类似的东西
template<typename int_type>
void myClass(int_type a) {
// [...]
}
我现在想使用 sscanf()
将文件中的数据读入类型为 int_type
的变量中。为此,我必须指定 int_type
的格式。到目前为止,我一直在做类似的事情
if(sizeof(int) == sizeof(int_type))
sscanf(buffer, "%d %d", &i, &j);
else if(sizeof(long long) == sizeof(int_type))
sscanf(buffer, "%lld %lld", &i, &j);
else
assert(false);
但这似乎不是处理事情的最佳方式。
还有什么建议吗?
最佳答案
你可以使用类和特化:
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);
}
但更简单的方法是使用 operator >>
template <typename T>
void my_scanf2(const char* buffer, T&a, T&b)
{
std::stringstream ss(buffer);
ss >> a >> b;
}
关于c++ - 模板参数的格式规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25947231/