小编Mus*_*shy的帖子

提高::算法::包含

我查看了模板定义,并且参数似乎需要跨范围和谓词的迭代器.我传入了一个vector.begin(),... end()和一个std :: string谓词,但仍然得到许多与一系列boost库项目相关的编译时错误.我能看到使用boost :: algorithm :: contains的明确例子吗?

c++ boost contains

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

c ++中类似Java的lastIndexOf

我对boost和c ++进行了一些研究,但无法找到与我的问题相关的任何内容.是否有一个实现lastIndexOf的boost库或STL函数?

c++ boost c++11 lastindexof

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

boost :: variant访客类是否需要?

我是否需要使用诸如class Visitor : public boost::static_visitor<>boost :: variant之类的访问者类?

如果没有,有没有理由不使用访客?是否有理由喜欢访客班?

我问这个问题,因为访问者类似乎是使用boost :: variant的一个多余方面.

c++ boost-variant apply-visitor

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

时间:2019-05-06 标签:c++std::shared_ptrErrorC2664

我正在使用 astd::shared_ptr指向一个节点

template<typename T>
class A
{
    class Node
    {
       T data;
       std::shared_ptr<Node> link;
       Node(T data, std::shared_ptr<Node> link);
    };
    void push(T data);
    std::shared_ptr<Node> top;
};

template<typename T>
A<T>::Node::Node(T data, std::shared_ptr<typename A<T>::Node> link) : 
data(data), link(link)
{
}

template<typename T>
void A<T>::push(T item)
{
    if (top == nullptr)
    {
       top = std::make_shared<typename A<T>::Node>(new typename 
                                                    A<T>::Node(item, nullptr));
    }
    else
    {
       top = std::make_shared<typename A<T>::Node>(new typename A<T>::Node(item, top));
    }
}
Run Code Online (Sandbox Code Playgroud)

结果声明和定义导致编译器错误

严重性代码说明项目文件行抑制状态错误 C2664“Stack::Node::Node(const Stack::Node &)”:无法将参数 1 从“Stack::Node *”转换为“const Stack::Node &”内存901

我需要改变什么才能符合 …

shared-ptr c2664 c++11

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

升压::变体; 定义访客类

在Java中,我能够在不指定类型的情况下定义泛型类的变量.

class Tree<T extends Comparable<? super T>> {}
somewhere-else: Tree tree;
Run Code Online (Sandbox Code Playgroud)

然后我可以从文件中读取一些对象并将其类型转换为我想要的类类型.

tree = (Tree<String>) some object;
Run Code Online (Sandbox Code Playgroud)

随着boost::variant我已经开始变体的定义.

typedef boost::variant<Tree<std::string>, Tree<int>> TreeVariant; TreeVariant tree;
Run Code Online (Sandbox Code Playgroud)

我知道我需要指定一个visitor class但是从这个例子中不清楚如何定义它,以便我能够分配给我的tree变量Tree<std::string>或者Tree<int>.

然后我想从那里继续使用变量调用Tree的成员函数tree.

c++ visitor-pattern boost-variant

0
推荐指数
1
解决办法
1211
查看次数

std :: unique_ptr自定义删除器

参考嗯,std :: unique_ptr的自定义删除器是如何工作的?

构造函数

std::unique_ptr<ErrorHandling> error_;

RecursiveDescentParser::RecursiveDescentParser(std::string inputStream, bool fileService, 
            boost::optional<std::string> filePathName, std::ofstream &writer){

    if (fileService == true){
        error_(new ErrorHandling(fileService, writer));  <---- compiler error
    }
    else{
        error_(new ErrorHandling(fileService, std::ofstream())); <---- compiler error
    }       
}
Run Code Online (Sandbox Code Playgroud)

编译错误

Error   1   error C2247: 'std::default_delete<_Ty>::operator ()' not accessible because 'std::unique_ptr<_Ty>' uses 'private' to inherit from 'std::_Unique_ptr_base<_Ty,_Dx,_Empty_deleter>'
Run Code Online (Sandbox Code Playgroud)

这里描述的错误原因.

我之所以认为'std::default_delete<_Ty>::operator ()private因为子类(std::unique_ptr在这种情况下)指定private inheritance我会编写自己的自定义删除器.问题是我对语法和符号成功感到不舒服.

c++ unique-ptr

0
推荐指数
1
解决办法
2130
查看次数

Java可比合同

我必须始终遵守为之建立的合同Comparable Interface吗?当合同的所有三个案例都不清楚时,是否有可接受的杠杆?

合同简单地说明:

If this object precedes that; return negative value
If this object equals that; return zero
If this object proceeds that; return positive value 
Run Code Online (Sandbox Code Playgroud)

我希望比较两个作为Point2D对象的点.使用该distance(Point2D point)行为比较两个点使得compareTo()出现二进制; 两个点的距离为零或距离不为零.

如果我要编写一个compareTo()覆盖默认值的行为,可能会如下:

private Point2D location;

public int compareTo(Object o)
{
    if(this.getLocation().distance(o.getLocation() == 0)
    {
        return 0;
    }
    else
    {
        return 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

也许比较两个Point2D对象更适合使用简单的行为测试距离而不是麻烦实现Comparable.甚至可能有办法遵守我不知道的合同.

java contract comparable

0
推荐指数
1
解决办法
828
查看次数

从Java.lang.String确定完全限定的类名

我已经考虑过如何获取表示类名的java.lang.String并确定完全限定名,然后使用Java.lang.Class.forName(FullyQualifiedName)将字符串转换为类.

这让我感到困惑,因为我不能将Java.lang.Class.forName()与表示类名称的Java.lang.String一起使用,例如"Address",因为我需要完全限定的名称,否则我会得到一个Exception.ClassNotFoundException让我回到需要知道完全限定的名称,但是当我不能使用Java.lang.Class.forName()时.

我只是坚持我目前的知识.我已经使用谷歌进行了搜索,甚至创建了这个问题,但我敢打赌,这已经被问到了答案.有人请指出我正确的方向?

注意:应该删除此问题,因为它似乎无法执行OP在Java中请求的操作.

java fully-qualified-naming

0
推荐指数
1
解决办法
2766
查看次数

另一个无效*主题; 我只是要问,因为我很困惑

好吧,虽然堆栈上的详细信息void*,书籍喜欢The C Programming Language (K&R)The C++ Programming Language (Stroustrup).我学到了什么?这void*是一个没有推断类型的通用指针.它需要强制转换为任何已定义的类型,并且打印void*只会产生地址.

还有什么我知道的? void*不能被解除引用,到目前为止仍然是C/C++我发现了很多关于但很少理解的一个项目.

我知道它必须是强制转换的,*(char*)void*但对我来说没有任何意义的generic指针是我必须知道我需要什么类型来获取值.我是一名Java程序员; 我理解泛型类型,但这是我挣扎的事情.

所以我写了一些代码

typedef struct node
{
  void* data;
  node* link;
}Node;

typedef struct list
{
   Node* head;
}List;

Node* add_new(void* data, Node* link);

void show(Node* head);

Node* add_new(void* data, Node* link)
{
  Node* newNode = new Node();
  newNode->data = data;
  newNode->link = link;

  return newNode;
}

void show(Node* head)
{
  while …
Run Code Online (Sandbox Code Playgroud)

c99 void-pointers c++11

0
推荐指数
1
解决办法
65
查看次数