我查看了模板定义,并且参数似乎需要跨范围和谓词的迭代器.我传入了一个vector.begin(),... end()和一个std :: string谓词,但仍然得到许多与一系列boost库项目相关的编译时错误.我能看到使用boost :: algorithm :: contains的明确例子吗?
我对boost和c ++进行了一些研究,但无法找到与我的问题相关的任何内容.是否有一个实现lastIndexOf的boost库或STL函数?
我是否需要使用诸如class Visitor : public boost::static_visitor<>boost :: variant之类的访问者类?
如果没有,有没有理由不使用访客?是否有理由喜欢访客班?
我问这个问题,因为访问者类似乎是使用boost :: variant的一个多余方面.
我正在使用 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
我需要改变什么才能符合 …
在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.
参考嗯,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我会编写自己的自定义删除器.问题是我对语法和符号成功感到不舒服.
我必须始终遵守为之建立的合同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.lang.String并确定完全限定名,然后使用Java.lang.Class.forName(FullyQualifiedName)将字符串转换为类.
这让我感到困惑,因为我不能将Java.lang.Class.forName()与表示类名称的Java.lang.String一起使用,例如"Address",因为我需要完全限定的名称,否则我会得到一个Exception.ClassNotFoundException让我回到需要知道完全限定的名称,但是当我不能使用Java.lang.Class.forName()时.
我只是坚持我目前的知识.我已经使用谷歌进行了搜索,甚至创建了这个问题,但我敢打赌,这已经被问到了答案.有人请指出我正确的方向?
注意:应该删除此问题,因为它似乎无法执行OP在Java中请求的操作.
好吧,虽然堆栈上的详细信息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) c++ ×5
c++11 ×3
boost ×2
java ×2
c2664 ×1
c99 ×1
comparable ×1
contains ×1
contract ×1
lastindexof ×1
shared-ptr ×1
unique-ptr ×1