LINUX.ORG.RU

История изменений

Исправление MOPKOBKA, (текущая версия) :

Не, погоди. Вот у тебя два дерева: в одном string, в другом int. Что мешает мне вызвать функцию, которая получает int, на дерево, в котором string?

Несовместимый тип.

struct rbtree_c { ... };
void rbtree_c_set(
  struct rbtree_c *rb,
  const void *element,
  int element_size
);

template <typename T>
class rbtree<T> {
private:
  rbtree_c rb;
public:
  void set(const T* item) { rbtree_c_set(&rb, item, sizeof(T)); }
};

rbtree<int> rbtree_int;
rbtree_int.set("hello"); // error

Если ты шаблонизировал struct RBTree, зачем страдание с char *?

Это обвязка для вызовов, а не для структуры и ее основных методов. Пример выше. Про плюсы этого подхода я написал еще более выше.

Исправление MOPKOBKA, :

Не, погоди. Вот у тебя два дерева: в одном string, в другом int. Что мешает мне вызвать функцию, которая получает int, на дерево, в котором string?

Несовместимый тип.

struct rbtree_c { ... };
void rbtree_c_set(
  struct rbtree_c *rb,
  const void *element,
  int element_size
);

template <typename T>
class rbtree<T> {
private:
  rbtree_c rb;
public:
  void set(T item) { rbtree_c_set(&rb, &item, sizeof(item)); }
};

rbtree<int> rbtree_int;
rbtree_int.set("hello"); // error

Если ты шаблонизировал struct RBTree, зачем страдание с char *?

Это обвязка для вызовов, а не для структуры и ее основных методов. Пример выше. Про плюсы этого подхода я написал еще более выше.

Исправление MOPKOBKA, :

Не, погоди. Вот у тебя два дерева: в одном string, в другом int. Что мешает мне вызвать функцию, которая получает int, на дерево, в котором string?

Несовместимый тип.

struct rbtree_c { ... };
void rbtree_c_set(
  struct rbtree_c *rb,
  const void *element,
  int element_size
);

template <typename T>
class rbtree<T> {
private:
  rbtree_c rb;
public:
  void set(T item) { rbtree_c_set(&rb, &item, sizeof(item)); }
};

rbtree<int> rbtree_int;
rbtree_int.set("hello"); // error

Если ты шаблонизировал struct RBTree, зачем страдание с char *?

Это обвязка для вызовов, а не для структуры и ее основных методов. Пример выше. Про плюсы этого подхода я написал выше.

Исправление MOPKOBKA, :

Не, погоди. Вот у тебя два дерева: в одном string, в другом int. Что мешает мне вызвать функцию, которая получает int, на дерево, в котором string?

Несовместимый тип.

struct rbtree_c { ... };
void rbtree_c_set(
  struct rbtree_c *rb,
  const void *element,
  int element_size
);

template <typename T>
class rbtree<T>
{
  rbtree_c rb;

  void set(T item) { rbtree_c_set(&rb, &item, sizeof(item)); }
};

rbtree<int> rbtree_int;
rbtree_int.set("hello"); // error

Если ты шаблонизировал struct RBTree, зачем страдание с char *?

Это обвязка для вызовов, а не для структуры и ее основных методов. Пример выше. Про плюсы этого подхода я написал выше.

Исходная версия MOPKOBKA, :

Не, погоди. Вот у тебя два дерева: в одном string, в другом int. Что мешает мне вызвать функцию, которая получает int, на дерево, в котором string?

Несовместимый тип.

struct rbtree_c { ... };
void rbtree_c_set(
  struct rbtree_c *rb,
  const void *element,
  int element_size
);

template <typename T>
class rbtree<T>
{
  rbtree_c rb;

  void set(T item) { rbtree_c_set(&rb, &item, sizeof(item)); }
};

rbtree<int> rbtree_int;
rbtree_int.set("hello"); // error