小编Kla*_*aim的帖子

C++中的HTML清理

有没有可用的C++(或C)函数/类/库,只是为了清理可能包含HTML的字符串?

我找到了很多用C#或其他语言进行消毒的源代码,这些语言在Web应用程序中更常用,但在C++中没有.

如果我找不到任何可用的功能,我会尝试实现自己的功能,但我认为经过严格测试的解决方案会好得多.

编辑>对我的需求更精确:

我在C++应用程序中从键盘输入文本.然后我需要在将其用作javascript函数调用中的参数之前对其进行清理.该javascript在加载的html页面中运行,该页面通过库(Navi)显示的纹理中自动呈现(通过Chromium).因此,我使用的javascript函数将简单地采用给定的文本,将P标记放在文本周围并将其注入div中,如下所示:

text_display.innerHTML += text_to_add;
Run Code Online (Sandbox Code Playgroud)

我需要在将文本发送到网页之前对文本进行清理,无论是针对此功能还是其他功能.它必须在Chromium输入之前进行消毒.

html c++ sanitization

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

为什么shared_ptr不能解析函数接口中的继承关系?

这是一个简化的例子:

#include <memory>
#include <vector>

template< class T >
class K 
{
public:
    virtual ~K(){}
};

class KBOUM : public K<int>{};

template< class U >
void do_something( std::shared_ptr< K<U> > k ) { }

int main()
{
   auto kboom = std::make_shared<KBOUM>();
    do_something( kboom );  // 1 : error

   std::shared_ptr< K<int> > k = kboom; // 2 : ok
   do_something( k ); // 3 : ok

}
Run Code Online (Sandbox Code Playgroud)

有或没有boost,无论我使用什么编译器,我都会在#1上遇到错误,因为shared_ptr<KBOOM>不会继承shared_ptr<K<int>>.但是,KBOOM继承自K<int>.您可以看到#2有效,因为shared_ptr旨在允许隐式地将子类指针传递给基类指针,就像原始指针一样.

所以我的问题是:

  1. 什么阻止std :: …

c++ templates boost c++11

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

复制线程安全吗?

就C++ 11而言,我认为在至少两个线程之间共享的值 - 语义对象的副本不是线程安全的吗?

这意味着如果我们想在一个线程中获得一个大对象的副本,我们仍然需要一些同步机制来制作副本?

c++ parallel-processing multithreading c++11

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

最有效的关联容器与std :: string作为关键?

我已经读过某个地方std :: map,当前的编译器,仍然是我们在STL中最有效的关联容器,即使是std :: unsorted_map - 从我在某处读到的,我不知道在哪里 - - 只有当有很多条目时才会在find()上变得更有效率,例如超过40k.

所以现在我不再确定了,因为我总是假设哈希映射更有效率,至少在字符串键的情况下.

简而言之:

如果我必须选择一个具有未知条目计数且使用std :: string作为键的关联容器,那么(至少在理论上)什么(查找速度)更有效(查找速度)选择?

c++ stl c++11

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

Float编译时计算没有发生?

一个小测试程序:

#include <iostream>


const float TEST_FLOAT = 1/60;

const float TEST_A = 1;
const float TEST_B = 60;
const float TEST_C = TEST_A / TEST_B;

int main()
{
 std::cout << TEST_FLOAT << std::endl;
 std::cout << TEST_C << std::endl;

 std::cin.ignore();
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果:

0
0.0166667
Run Code Online (Sandbox Code Playgroud)

在Visual Studio 2008和2010上测试过.

  1. 我在其他编译器上工作,如果我记得很清楚,那么第一个结果就像第二个结果一样.现在我的记忆可能是错的,但TEST_FLOAT不应该具有与TEST_C相同的值吗?如果没有,为什么?
  2. TEST_C值是在编译时还是在运行时解析的?我总是假设前者,但现在我看到那些结果我有些疑惑......

c++ compiler-optimization

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

为什么std :: bind()会尝试复制我的对象?

我正在使用VS2010.在我的不可兼容的Scene类的构造函数中,我有:

auto& character_mgr = CharacterManager::Instance();
    character_mgr.initialize();
character_mgr.add_observer(  std::bind( &Scene::on_character_event, *this, std::placeholders::_1, std::placeholders::_2 ) );
Run Code Online (Sandbox Code Playgroud)

这里add_observer定义为:

void add_observer( Observer observer ){ ... }
Run Code Online (Sandbox Code Playgroud)

使用Observer定义为:

typedef std::function< void ( CharacterEvent, const Character& ) > Observer;
Run Code Online (Sandbox Code Playgroud)

问题是编译器告诉我有一个尝试复制我的场景,我在绑定中使用*this,认为它将保留对它的引用,而不是在我复制绑定生成的仿函数时复制它.

  1. 为什么要尝试复制我的对象?这是正常的吗?
  2. 在提供对象的成员函数时,如何避免复制?

c++ stl

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

如何使用boost :: date_time从time_t获取本地日期时间?

我正在使用boost :: date_time并且我得到了一个time_t,它是由库使用C标准库中的time()函数生成的.

我正在寻找从那个时间开始获取当地时间的方法.我正在阅读文档,如果没有提供时区就找不到任何方法,我不知道因为它取决于机器的语言环境,我找不到任何方法从中获取一个.

我错过了什么?

c++ datetime boost boost-date-time

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

理解指针c ++

当我写这段代码时:

Animal *p;
Animal b;
p = &b;
Run Code Online (Sandbox Code Playgroud)

在我创建指针的第一行.是创建Animal的新对象还是仅在编写第二行时?

谢谢.

c++ pointers

0
推荐指数
2
解决办法
299
查看次数