使模板类获得另一个类<t>并将其视为数据类型(C ++)</t>

时间:2011-06-03 20:32:44

标签: c++ templates

我想做一些不寻常的事情。我有一个课程模板:

template<class T> class CFile

我想构建另一个具有int类型成员的类,

class foo
{
private:
     int memb;
}

当我将“foo”类作为“&lt; T&gt;”传递时对于“CFile”,foo应该只是作为整数。我需要想法如何仅使用foo中的内部逻辑来实现它,而不更改CFile(不允许CFile包含从类中提取int成员的任何逻辑)。

这是大学的任务,所以我不应该改变给我的规则。它应该是这样的:

class foo
{
    int memb;
}

int main()
{
  foo myFoo;

  // The ctor of CFile takes a file path and opens the file. After that it can write 
  // members from type < T > to the file. I need the CFile to write the memb member to
  // the file (Remember that the CFile is passed as < T >

  CFile<foo> file("c:\\file.txt");

}

感谢。

2 个答案:

答案 0 :(得分:1)

我认为你要做的是让class foo充当整数。为此,您需要提供:

  • 可以从foo创建int的构造函数。
  • 重载的强制转换操作符,隐式将foo类强制转换为int

你会有这样的事情:

class foo {
public:
  foo() {} // Create a foo without initializing it
  foo(const int &memb): _memb(memb) {} // Create and initialize a foo

  operator int&() {return _memb;} // If foo is not constant
  operator const int&() const {return _memb;} // If foo is constant

private:
  int _memb;
};

答案 1 :(得分:0)

类似的东西:

ofstream file;

file.open("file.txt"); //open a file

file<<T; //write to it

file.close(); //close it

在CFile中,这加到了Foo:

ofstream &operator<<(ofstream &stream, Foo& foo)
{
  stream << foo.memb;

  return stream; 
}