小编pol*_*pts的帖子

c ++中的模板特征类是什么?

可能重复:
traits类如何工作?

任何人都可以用C++解释模板特征类吗?我试图阅读一些书籍,但我无法理解它.

c++ templates traits

8
推荐指数
0
解决办法
7360
查看次数

为什么要将mutex作为参数传递给线程调用的函数?

在某些地方,我看到人们创建一个线程池并创建线程并使用这些线程执行一个函数.调用函数boost :: mutex时通过引用传递.为什么这样做?我相信你可以在被调用函数本身中声明一个互斥锁,或者可以声明为类成员或全局变量.有人可以解释一下吗?

例如

   myclass::processData()
   {
         boost::threadpool::pool pool(2);
         boost::mutex mutex;

         for (int i =0; data<maxData; ++data)
             pool.schedule(boost::bind(&myClass::getData, boost_cref(*this), boost::ref(mutex)));
    }
Run Code Online (Sandbox Code Playgroud)

然后,

    myClass::getData(boost::mutex& mutex)
    {
         boost::scoped_lock(mutex)    // Why can't we have class member variable mutex or                                     
                                      //local mutex here
        //Do somethign Here
}
Run Code Online (Sandbox Code Playgroud)

c++ multithreading boost mutex

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

在向量中查找连续元素

我正在研究一个问题,我必须从更大的向量创建子向量.如果向量中的元素是连续的,我必须创建这些元素的向量.如果存在不连续的元素,则创建该单个元素的向量.我的逻辑如下

vector<int> vect;
for (int nCount=0; nCount < 3; nCount++)
    vect.push_back(nCount);

vect.push_back(5);
vect.push_back(8);
vector<int>::iterator itEnd;

itEnd = std::adjacent_find (vect.begin(), vect.end(), NotConsecutive());
Run Code Online (Sandbox Code Playgroud)

仿函数NotConsecutive如下

return (int first != int second-1);
Run Code Online (Sandbox Code Playgroud)

所以我期待这些std::adjacent_find意志会让我回到迭代器,这样我就可以创建向量{0,1,2,3},向量2 {5}和向量{8}.但我不确定是否有更简单的方法?

编辑:我忘了提到我已经 std::adjacent_find在循环中了

while(itBegin != vect.end())
{
    itEnd = std::adjacent_find (vect.begin(), vect.end(), NotConsecutive());
    vector<int> groupe;
    if( std::distance(itBegin, itEnd) < 1)
    {

        groupe.assign(itBegin, itBegin+1);
    }
    else
    {
        groupe.assign(itBegin, itEnd);
    }

    if(boost::next(itEnd) != vect.end())
    {
       itBegin = ++itEnd;                           
    }
    else
    {
       vector<int> last_element.push_back(itEnd);
    }
}
Run Code Online (Sandbox Code Playgroud)

它有意义吗?

c++

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

如何在Java中将'问号(?)'类型泛型模仿到C++?

我有一个Java代码,其中函数的返回类型具有无界通配符类型(?).如何在C++中模拟这样的东西?例如

    public GroupHandlerSetting<?> handleGroupProcessingFor(final EventHandler<T> eventHandler)
    {
        return new GroupHandlerSetting<T>(eventHandler, eventProcessors);
    }
Run Code Online (Sandbox Code Playgroud)

c++ java templates

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

为什么函数不能获取monadic值并返回另一个monadic值?

假设我们有两个monadic函数:

  f :: a -> m b
  g :: b -> m c
  h :: a -> m c
Run Code Online (Sandbox Code Playgroud)

绑定函数定义为

(>>=) :: m a -> (a -> m b) -> m b
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么我们不能做类似下面的事情.声明一个函数,该函数将采用monadic值并返回另一个monadic值?

  f :: a -> m b
  g :: m b -> m c
  h :: a -> m c
Run Code Online (Sandbox Code Playgroud)

绑定函数定义为

(>>=) :: m a -> (ma -> m b) -> m b
Run Code Online (Sandbox Code Playgroud)

haskell中有什么限制函数采用monadic值作为其参数?

编辑:我想我没有说清楚我的问题.关键是,当你使用bind运算符编写函数时,为什么bind运算符的第二个参数是一个采用非monadic值(b)的函数?为什么不能采取monadic值(mb)并回馈mc .是这样的,当你处理monad并且你将要编写的函数将始终具有以下类型.

  f :: a -> m b
  g …
Run Code Online (Sandbox Code Playgroud)

monads haskell functional-programming

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

LevelDB与std :: map

在我们的应用程序中,我们使用std::map存储(键,值)数据并使用序列化将该数据存储在磁盘上.通过这种方法,我们发现磁盘I/O是性能瓶颈,使用密钥查找值不是很快.

我遇到了LevelDB并且正在考虑使用它.但我有一些问题.

  1. LevelDB的文档说明它是(字符串,字符串)键值对.这是否意味着我不能用于自定义键值对?
  2. 似乎std::map和LevelDB 之间的区别在于LevelDB是持久的并且std::map在内存中工作.这是否意味着磁盘I/O瓶颈对于levelDB来说会更成问题.

更具体地说,任何人都可以解释一下LevelDB是否可能是更好的选择std::map

PS:我尝试使用hash_maps但它看起来比较慢std::map

c++ stdmap boost-serialization leveldb

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

为什么我们需要在运行时使用函数指针调用这些函数.我们也可以直接打电话给他们

阅读了一些关于函数指针和回调的内容后,我无法理解它的基本用途.对我而言,它看起来不是直接调用函数,而是使用指向该函数的指针来调用它.任何人都可以解释一下我的回调和函数指针吗?当我们使用函数指针时,如何进行回调,因为我们只是通过指向它的指针调用函数而不是直接调用?

谢谢

ps:这里有一些关于回调和函数指针的问题,但它们没有充分解释我的问题.

c c++ function-pointers callback

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

对带有数字的字符串进行排序

我有类似的字符串7X1234 XY1236 NM1235.我想使用最后4位数字对这些字符串进行排序,只忽略最初的两个字母.此外,我想比较这些数字,看看它们是否是连续的.

实现这一目标的一种方法我可以想到的是将这些字符串在字母和数字之间拆分为(7X and 1234)和工作词汇将数字字符串转换为int并对其进行处理.但是,我怎样才能将字母表部分再次与数字部分相关联,这是数字字符串排序和比较时如何7X再次前缀到?1234C++

总之,如果我有,7X1234 XY1236 NM1235 BV1238我需要得到7X1234 NM1235 XY1236 BV1238

我没有详细说明我想知道字符串的数字部分是否是连续的.现在,当我像1234 1236 1235 1238这样的内注时,我会做类似下面的事情

            std::vector<int> sortedDigits{1234 1235 1236 1238};
            int count = 1;
            int pos = 0;
            std::vector<std::pair<int, int> > myVec;
            myVec.push_back(std::make_pair(sortedDigits[pos], count));
            for(size_t i = 1; i < sortedDigits.size(); ++i)
            {
                if(sortedDigits[i] != (sortedDigits[i-1] + 1))
                {
                   count = 1;
                   myVec.push_back(std::make_pair(sortedDigits[i], count) );
                   ++pos;
                }
                else
                {
                    sortedDigits[pos].second = ++count;
                }
            }  
Run Code Online (Sandbox Code Playgroud)

所以在最后我得到(1234, 3) …

c++ string

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

Coverity中溢出的返回值警告

我正在为下面的一段代码获得一个覆盖静态检查工具警告.

   double value = 0;
   std::string origValue("0.50");
   value = 0.10 * boost::lexical_cast<double>(origValue);
Run Code Online (Sandbox Code Playgroud)

警告是"溢出的返回值(INTEGER_OVERFLOW)".我无法理解上面的代码有什么问题.当我使用双打时,整数溢出是如何进行的?谢谢.

c++ integer-overflow coverity-prevent

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

声明一个const变量作为参考

在某些地方,我看到过这样的变量

const int &var1;
extern int & var2;
Run Code Online (Sandbox Code Playgroud)

这些变量在其他地方定义.我一直认为,当您声明对变量的引用时,您将在同一位置绑定对该变量的引用.我在这里遗漏了一些东西.当没有限定符(例如const或extern)时,我还没有看到如上所述的引用.

c++ reference declaration

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