相关疑难解决方法(0)

指针,智能指针或共享指针?

我正在使用普通指针编程,但我听说像Boost这样的库实现了智能指针.我还看到在Ogre3D渲染引擎中有一个深度使用共享指针.

三者之间究竟有什么区别,我应该坚持使用它们的类型吗?

c++ pointers

115
推荐指数
5
解决办法
11万
查看次数

确定Type是否是模板函数中的指针

如果我有模板功能,例如:

template<typename T>
void func(const std::vector<T>& v)
Run Code Online (Sandbox Code Playgroud)

有什么方法可以在函数中确定T是否是指针,或者我是否必须使用另一个模板函数,即:

template<typename T>
void func(const std::vector<T*>& v)
Run Code Online (Sandbox Code Playgroud)

谢谢

c++ templates

37
推荐指数
2
解决办法
2万
查看次数

有一个模板参数,可以是指针类型或非指针类型

假设我有类似的东西:

template <class T>
void do_something(T t){
  pass_it_somewhere(t);
  t->do_something();
}
Run Code Online (Sandbox Code Playgroud)

现在T允许是指针类型或非指针类型是有用的.函数do_something(...)基本上可以处理指针和非指针,除了t->do_something().对于指针,我需要一个->和非指针,我需要一个.访问成员.

有没有办法让T接受指针非指针?

c++ templates pointers c++11

9
推荐指数
2
解决办法
1731
查看次数

具有指针类型和常规类型的类模板

我为其值类型定义了一个带有模板的Node类

template<class T>
class Node {
  T val;
  public:
    Node (T & v) : val (v) {}
    ...
    void print() { cout << v << endl; }
}
Run Code Online (Sandbox Code Playgroud)

大多数情况下,感兴趣的节点值将是一个对象类class Foo.在这种情况下,使用Node<Foo *>会更方便.但也可能是节点将保持原始时间int.然后使用Node<int>就足够了.

问题是,根据是否T是指针类型,某些函数可能需要表现不同.例如,print应该cout << *v在何时以及cout << v其他方面.

我试过的是定义两者:

template<class T>
class Node {
  T val;
  public:
    Node (T & v) : val (v) {}
    ...
    void print() { cout << v << endl; }
} …
Run Code Online (Sandbox Code Playgroud)

c++ templates pointers

7
推荐指数
1
解决办法
2万
查看次数

处理解除引用语法的C++泛型类

处理某些类型需要使用成员/方法访问的事实的最佳方法是什么.操作员,而其他人使用 - >操作员.

编写代码是最好的.运算符并让调用者包装类型如下面的代码示例所示.

来自C#背景我不习惯这个特殊问题.

#include <iostream>
#include <string>
#include <vector>
#include <memory>

template<class T>
class container{
  public:
    void add(T element){
        elements_.push_back(std::move(element));   
    }

    void process(){
        for(auto& a: elements_){
            a.print();   
        }
    }
  private:
    std::vector<T> elements_;
};

class printable{
public:
    void print(){
        std::cout << "Print\n";   
    }
};

template<class T>
class printable_forwarder{
public:
    printable_forwarder(T element): element_{std::move(element)}{

    }

    void print(){
        element_->print();   
    }

private:
    T element_;
};

int main()
{
    container<printable> c1;
    c1.add(printable{});
    c1.process();

   container<printable_forwarder<std::shared_ptr<printable>>> c2;
   std::shared_ptr<printable> sp{std::make_shared<printable>()};
   c2.add(printable_forwarder<decltype(sp)>{sp});
   c2.process();
}
Run Code Online (Sandbox Code Playgroud)

这看起来更好吗?

#include <iostream>
#include …
Run Code Online (Sandbox Code Playgroud)

c++ templates generic-programming

3
推荐指数
1
解决办法
763
查看次数

标签 统计

c++ ×5

templates ×4

pointers ×3

c++11 ×1

generic-programming ×1