小编log*_*og0的帖子

在钻石层次结构中向下倾斜

为什么static_cast不能从虚拟基地垂头丧气?

struct A {};
struct B : public virtual A {};
struct C : public virtual A {};
struct D : public B, public C {};

int main()
{
  D d;
  A& a = d;
  D* p = static_cast<D*>(&a); //error
}  
Run Code Online (Sandbox Code Playgroud)

g ++ 4.5说:

 error: cannot convert from base ‘A’ to derived type ‘D’ via virtual base ‘A’
Run Code Online (Sandbox Code Playgroud)

解决方案是使用dynamic_cast?但为什么.什么是理性?

- 编辑 -
下面非常好的答案.没有答案详细说明子对象和vtable最终如何订购.以下文章为gcc提供了一些很好的例子:http:
//www.phpcompiler.org/articles/virtualinheritance.html#Downcasting

c++ casting virtual-inheritance static-cast diamond-problem

23
推荐指数
2
解决办法
1961
查看次数

在值上迭代两次(MapReduce)

我收到一个迭代器作为参数,我想迭代两次值.

public void reduce(Pair<String,String> key, Iterator<IntWritable> values,
                   Context context)
Run Code Online (Sandbox Code Playgroud)

可能吗 ?怎么样 ?签名是由我正在使用的框架(即Hadoop)强加的.

- 编辑 -
最后方法的真实签名reduceiterable.我被这个wiki页面误导了(这实际上是我发现的wordcount的唯一非弃用(但错误的)示例).

java hadoop iterator

18
推荐指数
4
解决办法
3万
查看次数

将char数组转换为String

我有一个返回char数组的函数,我希望它变成一个String,这样我就可以更好地处理它(与其他存储数据相比).我使用这个简单的应该工作,但它不是出于某种原因(bufferPos是数组的长度,buffer是数组,item是一个空字符串):

for(int k=0; k<bufferPos; k++){
      item += buffer[k];
      }
Run Code Online (Sandbox Code Playgroud)

buffer有正确的价值观也是如此bufferPos,但是当我尝试转换,例如544900010837154,它仅持有54如果我添加Serial.prints到像这样:

for(int k=0; k<bufferPos; k++){
                  Serial.print(buffer[k]);
                  Serial.print("\t");
                  Serial.println(item);
                  item += buffer[k];
                }
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

5   
4   5
4   54
9   54
0   54
0   54
0   54
1   54
0   54
8   54
3   54
7   54
1   54
Run Code Online (Sandbox Code Playgroud)

我错过了什么?感觉就像这么简单的任务,我没有看到解决方案......

arrays string arduino

18
推荐指数
3
解决办法
18万
查看次数

检查指针是否指向堆上已分配的内存

我想知道指针是否指向一个用malloc/new分配的内存.我意识到任意地址的答案是"不,你不能",但我认为可以覆盖malloc/free并跟踪分配的内存范围.

您是否知道提供此特定工具的内存管理库?
你知道生产代码吗?

Valgrind很棒,但是仪表太多了(慢)并且Will说我们不想像这样使用Valgrind(使得软碰撞足够好).
Mudflap是一个非常好的解决方案,但是专门用于GCC,遗憾的是,检查不会简单地返回一个布尔值(请参阅下面的答案).
请注意,检查内存写入是否合法是一个安全问题.所以寻找表现是有动力的.

c c++ malloc pointers memory-management

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

C++ - 在不使用RTTI/dynamic_cast的情况下向下转换钻石形状的继承对象

我目前正致力于在非RTTI平台(Android)上集成使用大量RTTI内容的第三方软件包.基本上,我做了自己的RTTI实现,但我遇到了问题.

问题是很多类都有钻石继承问题,因为所有类派生自相同的基类(对象)..所以,如果我想从基类转发到派生类,我必须使用一个dynamic_cast - 但RTTI不可用!当没有dynamic_cast的虚拟继承时,如何将对象从父对象转换为子对象?

它看起来像这样:

class A 
{
public:
 virtual char* func() { return "A"; };
};
class B : public virtual A
{
public:
 //virtual char* func() { return "B"; };
};
class C : public virtual A 
{
public:
 //virtual char* func() { return "C"; };
};

class D : public B, public C 
{
public:
 //virtual char* func() { return "D"; };
};

D d;
A* pa = static_cast<A*>(&d);
D* pd = static_cast<D*>(pa); // can't do that! …
Run Code Online (Sandbox Code Playgroud)

c++ casting multiple-inheritance rtti diamond-problem

14
推荐指数
2
解决办法
9261
查看次数

最大编辑距离和基于词频的建议

我需要一个符合以下规范的拼写检查器:

  • 非常可扩展.
  • 能够为建议的单词设置最大编辑距离.
  • 根据提供的单词频率(最常见的单词首先)获得建议.

我接过一看的hunspell:
我发现参数MAXDIFF的人,但似乎并没有像预期的那样工作.也许我用错了方法

文件t.aff:

MAXDIFF 1 
Run Code Online (Sandbox Code Playgroud)

文件dico.dic:

5  
rouge  
vert  
bleu  
bleue  
orange  
Run Code Online (Sandbox Code Playgroud)

-

NHunspell.Hunspell h = new NHunspell.Hunspell("t.aff", "dico.dic");
List<string> s = h.Suggest("bleuue");
Run Code Online (Sandbox Code Playgroud)

返回相同的东西t.aff是否为空:

bleue
bleu
Run Code Online (Sandbox Code Playgroud)

c# c++ nlp spell-checking hunspell

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

C++ zip可变参数模板

这是C++中一个简单的双容器zip函数:

template <typename A, typename B>
std::list<std::pair<A, B> > simple_zip(const std::list<A> & lhs,
                                       const std::list<B> & rhs)
{
  std::list<std::pair<A, B> >  result;
  for (std::pair<typename std::list<A>::const_iterator,
                 typename std::list<B>::const_iterator> iter
       =
       std::pair<typename std::list<A>::const_iterator,
                 typename std::list<B>::const_iterator>(lhs.cbegin(),
                                                        rhs.cbegin());
       iter.first != lhs.end() && iter.second != rhs.end();
       ++iter.first, ++iter.second)
  {
    result.push_back( std::pair<A, B>(*iter.first, *iter.second) );
  }
  return result;
}
Run Code Online (Sandbox Code Playgroud)

如何将此扩展到具有可变参数模板的任意数量的容器?

我想general_zip接受tuplelistS(每个列表可以包含不同类型的),并返回listtuple秒.

c++ iterator tuples variadic-templates c++11

8
推荐指数
2
解决办法
1318
查看次数

每个文件的Git贡献者

我想列出存储库中每个文件的每个贡献者.

这是我现在所做的:

find . | xargs -L 1 git blame -f | cut -d' ' -f 2-4 | sort | uniq
Run Code Online (Sandbox Code Playgroud)

这很慢.有更好的解决方案吗?

git sh

8
推荐指数
2
解决办法
1281
查看次数

钻石继承最低基类构造函数

守则如下:

代码 :

#include <iostream>

using namespace std;

class Animal{
   int a;

    public:
    Animal(int a) : a(a){}
    int geta(){return a;}
};

class Bird : virtual public Animal{
    string b;
    public:
    Bird(int a , string b) : Animal(a) , b(b){}
};

class Fish : virtual public Animal{
    int f;
    public:
    Fish(int a , int f) : Animal(a) , f(f){}
};

class Unknown : public Bird, public Fish{
    char u;
    public:
    Unknown(int a , int f , string b , char u …
Run Code Online (Sandbox Code Playgroud)

c++ constructor diamond-problem

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

提升计时器:如何在需要时获取时间?

所以,我读这提振文档,但我仍然不知道怎样做这样简单的事

int main() {
    //stuff
    startTimer();
    // do stuff
    int i =getTimerValue();
    //stuff
}
Run Code Online (Sandbox Code Playgroud)

所以要获得我已经完成的东西的执行时间.怎么办这样的事情?

c++ boost timer

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