相关疑难解决方法(0)

C++模板方法:为什么Node <int>没问题,但Node <float>?

我很少使用模板.我不知道为什么我看到下面的代码生成错误的push方法Node<float>

构建错误是:没有匹配函数来调用push.

Node<int>* push方法很好.

Node<float>* head1 = NULL;
push(&head1, 1);

template <typename T>
struct Node {
    T data;
    Node* next;
};

template <typename T>
void push(Node<T>** head, T data) {
    Node<T>* tmp = *head;
    Node<T>* newNode = NULL; //createNode(data);

    if (tmp == NULL) {
        *head = newNode;
    }
    else {
        while (tmp->next)
            tmp=tmp->next;

        tmp->next = newNode;
    }
}

int main(int argc, const char * argv[]) {
    Node<float>* head1 = NULL;
    push(&head1, 1);

    Node<int>* head = NULL;
    push(&head, …
Run Code Online (Sandbox Code Playgroud)

c++ templates

15
推荐指数
3
解决办法
1538
查看次数

这里的"boost :: mpl :: identity <T> :: type"有什么意义?

我正在检查clampboost中的实现:

  template<typename T, typename Pred> 
  T const & clamp ( T const& val, 
    typename boost::mpl::identity<T>::type const & lo, 
    typename boost::mpl::identity<T>::type const & hi, Pred p )
  {
//    assert ( !p ( hi, lo ));    // Can't assert p ( lo, hi ) b/c they might be equal
    return p ( val, lo ) ? lo : p ( hi, val ) ? hi : val;
  } 
Run Code Online (Sandbox Code Playgroud)

如果我查阅文档,则identity返回模板参数不变.

身份元功能.返回X不变.

那么在这里使用它有什么意义呢?

不typename boost::mpl::identity<T>::type等于T?

c++ templates boost argument-deduction

11
推荐指数
1
解决办法
1197
查看次数

标签 统计

c++ ×2

templates ×2

argument-deduction ×1

boost ×1