首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C++模板接口

使用C++模板接口
EN

Stack Overflow用户
提问于 2014-06-09 10:26:16
回答 1查看 90关注 0票数 0

我发现模板界面非常优雅,并且尝试实现它面临着我无法解决的问题。我希望你能帮我弄清楚。

我有课,例如,健忘。

代码语言:javascript
复制
template<typename T> class Smelter;

template <typename T>
class Forge
{
    long SmeltIt(vector<T>& ore)
    {
        long res;
        Smelter<T> smelter;  
        for (const auto t : ore)
        {
            res += smelter.smelt(t);
        }
        return res;
    }
};

用模板类熔炼没有任何实现和模板类Forge的实现。

现在,当我想添加class Iron时,我需要创建iron.h并实现冶炼厂来使用它,这样就可以使用iron.h。

代码语言:javascript
复制
#include "forge.h"
class Iron {};

template<>
class Smelter<Iron>
{
    long smelt(const Iron& iron) { return 5; }
};

int main()
{
    vector<Iron> ore;
    Iron iron;
    ore.push_back(iron);
    ore.push_back(iron);
    ore.push_back(iron);
    Forge<Iron> forge;
    cout << forge.SmeltIt(ore); //have to be 15
}

如果所有这些东西都在one头文件中,那么一切都很完美。但是,如果我创建iron.h来实现冶炼厂,编译器就找不到模板类冶炼厂。如果我在健忘的h和iron.h中为冶炼厂创建声明副本,那么它们之间就会发生冲突。

最好的解决办法是什么?如果我能够在其他文件中实现我的模板界面,这将非常有用。如果没有这种模板接口,例如,如果忘记了.h是工具,可以在项目之间使用,而iron.h是我当前的专长。

结果:在名称空间中,一切都按预期工作,问题超出了所描述的问题。所有的模板,即使有可能在不同的文件(这是个问题)之间分离-完美地工作。但它们必须共享相同的名称空间。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-09 11:11:55

在修复了一些小问题之后,您的代码就可以很好地编译(使用clang3.3)并产生所需的结果。以下是固定的代码(在一个文件中,但按#include的顺序排列)

代码语言:javascript
复制
template<typename T> class Smelter;

template <typename T>
class Forge
{
public:
  long SmeltIt(std::vector<T>& ore)   // must be public; use std::
  {
    long res{};                       // must be initialized (to 0)
    Smelter<T> smelter;  
    for (const auto t : ore)
      res += smelter.smelt(t);
    return res;
  }
};

class Iron {};

template<>
class Smelter<Iron>
{
public:
  long smelt(const Iron& iron)       // must be public
  { return 5; }
};

int main()
{
  std::vector<Iron> ore;             // std::
  Iron iron;
  ore.push_back(iron);
  ore.push_back(iron);
  ore.push_back(iron);
  Forge<Iron> forge;
  std::cout << forge.SmeltIt(ore)    // have to be 15
        << std::endl;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24118285

复制
相关文章

相似问题

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