xh
class X
{
public:
template<typename T1, typename T2>
struct Bar
{
public:
template<typename T1> void bar(T2 const& t2);
};
}
x.cpp
如何定义函数?
xh
class X
{
public:
template<typename T1, typename T2>
struct Bar
{
public:
template<typename T1> void bar(T2 const& t2);
};
}
x.cpp
如何定义函数?
你有问题,T1
掩盖了T1
in struct Bar
。您可以将其更改为T3
如下所示:
class X
{
public:
template<typename T1, typename T2>
struct Bar
{
public:
template<typename T3> void bar(T3 const& t3); // Could define it here {}
};
}; // <-- Missing closing brace
template <typename T1, typename T2>
template <typename T3>
void X::Bar<T1, T2>::bar(T3 const& t3){} // Assuming `T3 const& t3` otherwise...
或者
template <typename T1, typename T2>
template <typename T3>
void X::Bar<T1, T2>::bar(T2 const& t2){}
然后像这样调用它:
X::Bar<int, int> b;
b.bar(1);
或者
X::Bar<int, int> b;
b.bar<int>(1);
这是你的想法吗?
class X
{
public:
template<typename T1, typename T2>
struct Bar
{
public:
void bar(T2 const& t2);
};
};
template <typename T1, typename T2> void X::Bar<T1, T2>::bar( T2 const & t2 )
{
}
请注意,我删除了template<typename T1>
off ,void bar
因为该资格已经是template<typename T1, typename T2> struct Bar
.
编辑:如果你真的需要第三种类型来限定bar
,那么考虑这个例子:
class X
{
public:
template<typename T1, typename T2>
struct Bar
{
public:
template <typename T3>
void bar(T1 const &t1, T2 const &t2, T3 const &t3);
};
};
template <typename T1, typename T2>
template <typename T3>
void X::Bar<T1, T2>::bar( T1 const &t1, T2 const &t2, T3 const &t3 )
{
}
与任何模板一样,您需要将定义包含在任何可能隐式实例化它的翻译单元中,因此您应该将其放在头文件而不是 .cpp 文件中。如果你想在行外包含函数的定义,下面是如何编写它:
template<typename T1, typename T2> template<typename T3>
void X::Bar<T1, T2>::bar(T2 const &t2) {
// ...
}
另外值得注意的是,您的类定义格式不正确,因为您将外部模板的参数T1
与内部模板的参数遮蔽T1
。您需要重命名其中之一。