c++ - 模板 vector 到 vector 转换函数

标签 c++ templates

我有一个基类,它有 4 个不同的参数 vector :HW、SW、FW、高级

每个类都派生自基类,并且需要能够从一个参数 vector 转换为另一个参数 vector 。

例如:转换( vector vec1, vector vec2);

一种实现方式是使用16个静态转换案例。然而,虽然目前有 4 种不同类型的 vector ,但以后可能会添加更多。

并非所有类都实现了所有 16 种转换。其中很多将使用默认转换(我想在返回“无转换定义错误”的基类中实现);

class A: public baseClass

Class B: public baseClass

Class C: public baseClass

C::Convert(Vector<HW> vec1, Vector<SW> vec2)
{
   vec2[0] = vec1[0] +vec1[1] *1.5;
}
B::Convert(Vector<HW> vec1, Vector<SW> vec2)
{
   vec2[0] = vec1[0] +vec1[1] *3.7;
}
A::Convert(Vector<SW> vec1, Vector<HW> vec2)
{
   vec2[0] = vec1[2] +vec1[1] *9;
}

定义通用转换的好方法是什么?我想也许是 vector 模板。

Template<Vector<K>, Vector<T>>
void Convert(const k& vec1, T vec2)

我不能假设存在从每个 vector 到另一个 vector 的转换。

最佳答案

你可以使用模板方法,看例子:

#include <iostream>
#include <vector>

class Hw {};
class Sw {};

// base class with default converters
class Base {
 public:
  template <class From, class To>
  void convert(const From& from, To& to);
};

// specialize template with default converters
template <>
void Base::convert(const std::vector<Hw>& from, std::vector<Sw>& to) {
  std::cout << "default converter" << std::endl;
}

// specialize forbidden version with runtime error
// (simply don't specialize anything to get link error, which is better)
template <>
void Base::convert(const std::vector<Hw>& from, std::vector<Hw>& to) {
  std::cout << "error converter" << std::endl;
}

// override some default behaviour
class A : public Base {
 public:
  // show you want to use other default converters
  using Base::convert;

  // special (not default) behaviour
  void convert(const std::vector<Hw>& from, std::vector<Sw>& to) {
    std::cout << "special A converter" << std::endl;
  }
};

// converter with defaults
class B : public Base {
};

int main() {
  std::vector<Hw> hw_vector;
  std::vector<Sw> sw_vector;

  A a;
  a.convert(hw_vector, sw_vector); // special A converter
  a.convert(hw_vector, hw_vector); // error converter

  B b;
  b.convert(hw_vector, sw_vector); // default converter
  b.convert(hw_vector, hw_vector); // error converter
  return 0;
}

关于c++ - 模板 vector 到 vector 转换函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18296864/

相关文章:

java - Java 常量可以在 Play! 中使用吗?模板?

c++ - 在继承中访问私有(private)成员

ruby-on-rails - 迭代 Rails 模板中的对象

c++ - 模板包扩展以将函数应用于连续的参数对

c++ - VS2010 中的 Qt - 无法使用设计器创建的对象

java - 如何在 NetBeans 7.1.1 中为日志消息创建代码模板

c++ - std::function、文字类型和模板

c++ - 多播大数据包包含到多个客户端的所有信息与到目标客户端的单个数据包

c++ - 在标准算法中,通过引用捕获哪里更正确?

c++ - 在基于 DirectX 的应用程序中使用软件输入面板