小编mok*_*oka的帖子

python:在将float转换为字符串时,在dot之后强制两个零

我目前正在尝试强制python在将float转换为字符串后保留两个零,即:

150.00而不是150.0

我对python不是很有经验,因此只能想到一种强力方法来实现这一点.是否有内置功能来执行此操作?

谢谢

python string floating-point

5
推荐指数
2
解决办法
3711
查看次数

Boost函数:存储boost :: bind返回的任何函数?

我想编写一个异步计时器,在经过一定时间后调用一个函数.现在我希望能够使用boost::bind()任何特定间隔过去后定时器调用的签名来绑定函数.我现在这样做的方式受到boost线程的启发,它有一些抽象的基类来存储线程函数.这就是我做的:

        class TimedFunctionBase
        {
        public:
            virtual void call() = 0;
        };

        typedef std::shared_ptr<TimedFunctionBase> TimedFunctionBasePtr;

        template<class F>
        class TimedFunction : public TimedFunctionBase
        {
        public:
            TimedFunction(F _f):
            m_function(_f)
            {
            }

            void call()
            {
                m_function();
            }

        private:
            F m_function;
        };
Run Code Online (Sandbox Code Playgroud)

然后,在timer函数内部,我只需保存回调,如下所示:

MyAsyncTimer
{
private:
    TimedFunctionBasePtr m_callback;
};
Run Code Online (Sandbox Code Playgroud)

并在定时函数内调用它

m_callback->call();
Run Code Online (Sandbox Code Playgroud)

我的问题其实非常简单:boost是否已经提供了一种机制来实现这一目标?经过长时间的搜索后,我找不到太多内容,内部boost::thread也看起来好像没有为这种用途预定义.也许boost::function_base?文档说你可能不会直接创建它.有提升方式,还是我必须自己编写这些容器类?

c++ boost function

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

Xcode4:再次出现"bad codegen,pointer diff"链接器错误

这个问题与此相关:"错误的codegen,指针差异"链接器错误与Xcode 4"错误的codegen,指针差异在提升"错误在32位构建XCode 3.2.6和4链接器错误ld:坏codegen,指针差异...到全球弱势符号

我目前正在将我的所有项目升级到Xcode4,并且我遇到了一些奇怪的问题.-如果我构建通用二进制文件或32位版本,则只会出现上述错误.如果我只坚持64位,事情就好了.我自己正在构建一个自定义静态库,现在我不在该代码中使用任何可见性设置(即属性((visibility("default")))).如果我链接该库并尝试构建项目,确切的错误是:

ld:错误的codegen,指针差异在Motor :: Core :: DefaultStoragePolicy :: DefaultStoragePolicy(myWindowContent*const&)到全局弱符号Motor :: Core :: NullPointerException :: ~NullPointerException()用于体系结构i386

它位于我的SmartPtr类中,它可以抛出NullPointerException(只是从std :: exception派生).如果我明确地将NullPointerException类的可见性设置为隐藏,那么事情编译正常,但隐藏异常可能不是很好!我尝试了以下编译器:GCC 4.2,LLVM-GCC 4.2和LLVM 2.1都存在同样的问题.在项目/目标设置中将默认隐藏的符号设置为yes不起作用(也不是我想要的).那么如何在不隐藏异常的情况下解决这个问题(这是无稽之谈).我必须忍受它,它是一个错误吗?期待您的想法,谢谢!

c++ macos xcode linker

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

osx上的aio:是在内核中实现还是在用户线程中实现?其他选择?

我正在使用小型c ++框架,并具有一个文件类,该文件类也应支持异步读写。除了在我发现的某些工作线程中使用同步文件I / O之外,唯一的解决方案是aio。无论如何,我环顾四周,在Linux上,aio甚至没有在内核中实现,而是通过用户线程实现。OSX是否也是如此?另一个问题是aio的回调功能,该功能必须为每个回调都产生一个额外的线程,因为您不能分配某个线程或线程池来解决该问题(信号不是我的选择)。因此,这是由此产生的问题:

  • aio是否在osx的内核中实现,因此最有可能比我自己的线程实现好吗?

  • 回调系统-为每个回调生成一个线程-在实践中是否会成为瓶颈?

  • 如果aio不值得在osx上使用,那么unix上还有其他替代方法吗?在可可中?在碳中?

  • 还是我应该使用自己的线程池简单地模拟异步I / O?

您在这方面的经验是什么?

io macos posix asynchronous aio

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

c ++:是否有类似"boost/std typetraits conditional"的东西在编译时生成一个值(不是一个类型)?

我目前正在执行以下操作以在编译时生成一个值,该函数有效:

        //if B is true, m_value = TRUEVAL, else FALSEVAL, T is the value type
        template<bool B, class T, T TRUEVAL, T FALSEVAL>
        struct ConditionalValue
        {
            typedef T Type;

            Type m_value;

            ConditionalValue():
            m_value(TRUEVAL)
            {}
        };

        template<class T, T TRUEVAL, T FALSEVAL>
        struct ConditionalValue<false, T, TRUEVAL, FALSEVAL>
        {
            typedef T Type;

            Type m_value;

            ConditionalValue():
            m_value(FALSEVAL)
            {}
        };
Run Code Online (Sandbox Code Playgroud)

然后你可以简单地做这样的事情:

template<class T>
void loadPixels(uint32 _w, uint32 _h, T * _pixels)
{
    PixelDataType::Type pixelType = PixelDataType::Auto; //enum I want to set

    ConditionalValue<boost::is_same<T, uint8>::value, PixelDataType::Type, …
Run Code Online (Sandbox Code Playgroud)

c++ boost metaprogramming std type-traits

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

c ++:在头部内分隔的类声明和定义会导致重复符号

如果它们是模板类,我通常只在头文件中定义我的类.-如果是这种情况,我仍然喜欢在头文件中拆分声明和定义:

template<class T>
class Foo
{
public:

    Foo();

    void fooFunc();
};


template<class T>
Foo<T>::Foo()
{

}

template<class T>
void Foo<T>::fooFunc()
{

}
Run Code Online (Sandbox Code Playgroud)

该代码也编译.但是,如果我删除模板:

class Foo
{
public:

    Foo();

    void fooFunc();
};


Foo::Foo()
{

}

void Foo::fooFunc()
{

}
Run Code Online (Sandbox Code Playgroud)

我得到Foos函数的重复符号错误.我非常确定这应该有效,并且我很惊讶它没有.这是预期的行为吗?如果我在定义之前添加内联也可以.

c++

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

std :: vector of std :: weak_ptr和std :: find

我目前正在尝试用std :: shared_ptr和std :: weak_ptr替换我的代码的某些部分.在很多部分我都有std ::的std :: weak_ptrs(以前是原始的ptrs),并使用std :: find来查找数组中的某个指针.这不适用于弱指针,因为它们由于各种原因不实现==运算符.我必须坚持使用std :: weak_ptr来避免循环依赖.我有什么选择,我应该回到使用原始指针而不是弱指针?

//_window is a shared_ptr that I want to find in a vector of weak_ptrs
WindowWeakPtrArray::iterator it = std::find(m_windows.begin(), m_windows.end(), _window); 
Run Code Online (Sandbox Code Playgroud)

谢谢

c++ stdvector c++11

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

c ++:带有任意签名的std :: function的std :: vector

是否有可能创建一个std::vector可以持有std::function任何签名?(函数参数都将被预先绑定.)

我尝试过std::vector<std::function<void()> >,因为如果我只有一种std::function类型,我可以绑定任何函数.

这似乎不适用于向量:如果我尝试向std::bind具有其他签名的向量添加函数void(),我得到:

No matching member function for call to 'push_back'
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

编辑:

我只记得,只要参数预先绑定,它std::function<void()>允许你绑定任何返回void的函数std::bind,它不允许你绑定任何签名,但为了我的目的它足够通用,所以以下工作:

class A
{
public:
    void test(int _a){ return 0; };
};

A a;
std::vector<std::function<void()> > funcArray;
funcArray.push_back(std::bind(&A::test, std::ref(a), 0));
Run Code Online (Sandbox Code Playgroud)

c++ function vector

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

OSX:从CGGlyph到UniChar

我目前正在使用CoreGraphics和CoreText编写一个简单的位图字体生成器。我使用以下方法检索字体的字距表:

CFDataRef kernTable = CTFontCopyTable(m_ctFontRef, kCTFontTableKern, kCTFontTableOptionNoOptions);
Run Code Online (Sandbox Code Playgroud)

然后解析它可以正常工作。字距调整对为我提供字距调整对的字形索引(即CGGlyph),我需要将它们转换为unicode(即UniChar),但不幸的是,这似乎并不容易。我最近使用的是:

CGFontCopyGlyphNameForGlyph
Run Code Online (Sandbox Code Playgroud)

来检索CGGlyph的字形名称,但我不知道如何将其转换为unicode,因为它们实际上只是字符串,例如quoteleft。我要做的另一件事是解析kCTFontTableCmap我自己,以手动完成从字形到unicode id的映射,但这似乎为该任务做了很多额外的工作。有没有简单的方法可以做到这一点?

谢谢!

c macos core-text

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

c ++:调用派生类的重载函数作为参数(没有显式转换)

想象一下以下场景:

    template<class T>
    void myFunction(T *)
    {
       //do nothing
    }

    void myFunction(myBase * _base)
    {
       //do something with _base
    }

int main( int argc, const char* argv[] )
{
    myDerivedFromBase * ptr = new myDerivedFromBase;
    myFunction(ptr); //calls the templated version

    myFunction(static_cast<myBase*>(ptr)); //calls the correct version

    delete ptr;
}
Run Code Online (Sandbox Code Playgroud)

基本上我想实现模板化函数被调用指针,而不是从我的基础派生.如果ptr是从myBase派生的,我希望在没有显式强制转换的情况下调用myFunction的第二个版本.那可能吗?

c++ casting overloading

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