首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模板参数格式规范

模板参数格式规范
EN

Stack Overflow用户
提问于 2014-09-20 09:18:11
回答 1查看 100关注 0票数 0

我有一个在整数类型上模板化的C++类;

代码语言:javascript
复制
template<typename int_type>
void myClass(int_type a) {
// [...]
}

现在,我希望将数据从文件中读取到带有int_type类型的sscanf()变量中。为此,我必须指定int_type的格式。直到现在,我还在做这样的事情

代码语言:javascript
复制
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);

但这似乎不是处理问题的最佳方法。

还有其他建议吗?

EN

回答 1

Stack Overflow用户

发布于 2014-09-20 15:42:11

您可以使用类和专门化:

代码语言:javascript
复制
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";
};

然后把它当作

代码语言:javascript
复制
template <typename T>
void my_scanf(const char* buffer, T&a, T&b)
{
    sscanf(buffer, scanf_format<T>::format2, &a, &b);
}

但是一个更简单的方法是使用operator >>

代码语言:javascript
复制
template <typename T>
void my_scanf2(const char* buffer, T&a, T&b)
{
    std::stringstream ss(buffer);
    ss >> a >> b;
}

实例化

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25947231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档