我目前正在尝试强制python在将float转换为字符串后保留两个零,即:
150.00而不是150.0
我对python不是很有经验,因此只能想到一种强力方法来实现这一点.是否有内置功能来执行此操作?
谢谢
我想编写一个异步计时器,在经过一定时间后调用一个函数.现在我希望能够使用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?文档说你可能不会直接创建它.有提升方式,还是我必须自己编写这些容器类?
这个问题与此相关:"错误的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 ++框架,并具有一个文件类,该文件类也应支持异步读写。除了在我发现的某些工作线程中使用同步文件I / O之外,唯一的解决方案是aio。无论如何,我环顾四周,在Linux上,aio甚至没有在内核中实现,而是通过用户线程实现。OSX是否也是如此?另一个问题是aio的回调功能,该功能必须为每个回调都产生一个额外的线程,因为您不能分配某个线程或线程池来解决该问题(信号不是我的选择)。因此,这是由此产生的问题:
aio是否在osx的内核中实现,因此最有可能比我自己的线程实现好吗?
回调系统-为每个回调生成一个线程-在实践中是否会成为瓶颈?
如果aio不值得在osx上使用,那么unix上还有其他替代方法吗?在可可中?在碳中?
还是我应该使用自己的线程池简单地模拟异步I / O?
您在这方面的经验是什么?
我目前正在执行以下操作以在编译时生成一个值,该函数有效:
//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) 如果它们是模板类,我通常只在头文件中定义我的类.-如果是这种情况,我仍然喜欢在头文件中拆分声明和定义:
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函数的重复符号错误.我非常确定这应该有效,并且我很惊讶它没有.这是预期的行为吗?如果我在定义之前添加内联也可以.
我目前正在尝试用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)
谢谢
是否有可能创建一个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) 我目前正在使用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的映射,但这似乎为该任务做了很多额外的工作。有没有简单的方法可以做到这一点?
谢谢!
想象一下以下场景:
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的第二个版本.那可能吗?