模板类非模板化方法参数
Template class non-templated method argument
我有一个使用模板的类。它是这样的:
template <typename T>
class a
{
public:
a(T arg);
a<T> func(a arg); // This seems to work, but...
a<T> func(a<T> arg); // ...should I be doing this instead?
private:
T local;
};
请注意func
的两个函数模板。两者都会编译(当然,不是同时编译),但哪一个是正确的,还是无关紧要?在第一个例子中,我指定了class a
是参数。。。在第一种情况下,可以使用不同的类型来代替T吗…例如,我可以这样做吗:
a<float> b;
a<int> c;
a<int> d;
d = c+ b;
我猜答案是"不",因为它没有编译!
在第二种情况下,很明显,参数必须具有模板化的相同类型。
由于上面讨论的内容,我猜测编译器实际上将a<T> func(a arg);
解释为a<T> func(a<T> arg);
。我说得对吗?
在您的类模板中,a
表示a<All the tempalte args here>
,即a<T>
所以你们的两个功能是相同的。
如果你想提供另一种类型,你应该使用模板功能
template <typename T> {
class a {
template<typename U>
a<T> func(a<U> arg);
}
您也可以考虑返回std::common_type<T, U>::type
,但在您的情况下,它不会编译,因为float
和int
的常见类型是float
a<float> x = a<int>(1) + a<float>(8)
应该在这种情况下工作
相关文章:
- c++方法参数只能在linux的发布模式下自行更改
- 使用移动语义:右值引用作为方法参数
- 无法将动态创建的对象数组从 qml 发送到 c++ 作为方法参数
- 将方法参数类型更改为子类中的派生类
- ofstream作为C 中的方法参数
- 使用 gmock 匹配器将 std::function 设置为 EXPECT_CALL 中的方法参数
- C com 方法参数扣除
- 获取非静态方法参数计数
- 使用 gmock 返回模拟方法参数
- 运行 QML 时出现"未知方法参数类型"错误
- 基本C - 构造contaning对象引用,并将其作为方法参数传递
- 将C 方法参数转换为模板参数会因编译错误而失败
- 如何在方法参数中使用boost :: asio :: buffer
- qsharedPointer作为方法参数或方法的返回值的良好实践
- 如何将方法指针声明为Typedef方法参数
- 方法参数中的 OpenCV 垫"预期")""
- 方法参数中的 consst* 常量
- 带有“class”详细类型说明符的方法参数
- 具有原始方法参数派生类的 C++ 重载方法参数
- C++ std::string length() 或 size() 不适用于方法参数