其他模板可用的功能?

时间:2014-04-03 19:15:34

标签: c++ templates friend

Y:

我会怀疑它,因为类(技术上)没有任何关系,但有没有办法可以与其他模板实现朋友一起制作课程?

X:

由于教学原因,我正在玩自己的固定点课程。任何人都需要获得基础定点值的唯一原因是从另一个固定点构建一个固定点,例如

template <typename I, size_t R>
class FixedPoint
{
public:
  template <typename J, size_t Rj>
  FixedPoint(const FixedPoint<J,Rj>& ref)
  {
        ...
     std::ptrdiff_t radix_diff = R-Rj;
     val_ = ref.val_ >> radix_diff;//there is more to this but you get the idea
  }
private:
  I val_;
}

所以基本上,我真的想要做到以下几点:

template <typename J,typename Rj>
friend FixedPoint<J,Rj>::FixedPoint(const FixedPoint<I,R>& ref);

虽然显然不可能。除了为val_ public创建一个getter函数之外,还有什么方法可以做到这一点吗?

编辑:

我要补充一点,我不确定这是不可能的,在g ++中我得到“内部编译器错误”:

/home/user/source/testdir/main.cpp: In instantiation of 'class FixedPoint<signed char, 4ul>':
/home/user/source/testdir/main.cpp:115:24:   required from here
/home/user/source/testdir/main.cpp:64:10: internal compiler error: unexpected expression 'Rj' of kind template_parm_index
   friend FixedPoint<J,Rj>::FixedPoint(const FixedPoint<I,R>& ref);
          ^
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://bugzilla.redhat.com/bugzilla> for instructions.
Preprocessed source stored into /tmp/ccWaztkQ.out file, please attach this to your bugreport.
make[2]: *** [CMakeFiles/TestProgram.dir/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/TestProgram.dir/all] Error 2
make: *** [all] Error 2
15:17:06: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project TestProgram (kit: Desktop)
When executing step 'Make'

1 个答案:

答案 0 :(得分:0)

Clang 3.5没有给出内部错误,但也不允许你在模板定义中实例化一个模板(这可能是一个无限循环)。所以答案是

template<typename,typename> friend class FixedPoint;

使模板的所有实例彼此友好...... :(