小编Bil*_*ias的帖子

map <int,int>默认值

std::map<int,int> mapy;
++mapy[5];
Run Code Online (Sandbox Code Playgroud)

假设mapy[5]永远是1 是安全的吗?我的意思是,mapy[5]在'++'之前总是会得到默认值0,即使没有显式声明,就像我的代码一样?

c++ dictionary default

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

OpenAL - 确定最大来源

是否有API允许您定义底层声音硬件允许的最大OpenAL"源"数?

在互联网上搜索,我找到了两条建议:

  • 继续生成OpenAL源,直到出现错误.但是,FreeSL(OpenAL包装器)中有一条说明"非常糟糕,甚至可能导致库崩溃"
  • 假设你只有16; 为什么有人会要求更多?(!)

第二项建议甚至被FreeSL采用.

那么,是否有一个通用的API来定义支持的同时"声音"的数量?

感谢您的时间,

法案

c++ audio openal

18
推荐指数
2
解决办法
7251
查看次数

什么时候(这个!=这个)在C++中?

我有一个非常奇怪的问题.

我有一个类/函数:

class MCBSystem {

    [...]

    template <class Receiver>
    void setCallBack(int i, Receiver* receiver, void(Receiver::*function)(void*)) {
        iCallBacks.at(i) = new CallBack<Receiver>(receiver, function, this);
    };
};
Run Code Online (Sandbox Code Playgroud)

我在另一个类中继承它(乘法):

class MenuBox : public OverlayBox, public HIDListener, public FANLib::MCBSystem {
[...]
};
Run Code Online (Sandbox Code Playgroud)

现在,如果我调用"setCallBack"函数:

        menuBox->setCallBack(MenuBox::CLICKED, this, &SubMain::widgetClicked);
Run Code Online (Sandbox Code Playgroud)

然后"menuBox"的值为0x06cf22b8,但在"setCallBack"中,"this"为0x06cf2370.

有人可以解释一下究竟发生了什么吗?

[编辑:]真正的问题是:如果我需要在'setCallBack'中存储'this',我怎样才能检查'menuBox == this'?

非常感谢advace!

c++ this multiple-inheritance

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

区分代码中的平移和普通屏幕模式 - Windows

我正在编写一个全屏3D游戏,我创建了一个菜单,用户可以选择屏幕分辨率以匹配他的硬件容量.

我正在枚举所有可用的屏幕模式,EnumDisplaySettingsExA如下所示:

std::vector<DEVMODEA> modes;
DEVMODEA modeInfo;
int modeNum = -1;
while (EnumDisplaySettingsExA(0, ++modeNum, &modeInfo, 0)) {
    if (modeInfo.dmBitsPerPel < 16) continue;
    modes.push_back( modeInfo );
}
Run Code Online (Sandbox Code Playgroud)

问题是,我正在进行平移模式!我无法分辨哪个是哪个; 例如我的ATI笔记本电脑的最大正常模式为1280x800,但也包含1024x600的平移模式!

任何人都知道区分2的方法,所以我可以拒绝菜单中的平移模式吗?

c++ windows screen-resolution resolution-independence panning

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

OpenCVSharp:无法加载 DLL“OpenCvSharpExtern”

我已经在我的项目中使用 NuGet 管理器安装了最新的 OpenCVSharp 2 (2.4.10.201...)。有关 OpenCVSharp.CvMat 的所有内容都工作正常(加载、操作等),因此我确信安装是正确的。

但是我根本无法使用 OpenCVSharp.CPlusPlus!问题是它不加载 OpenCvSharpExtern.dll。

try-catch 块显示错误:

try
{
    Mat mat = new Mat();
} catch (Exception err)
{
    Console.WriteLine( err );
}

System.TypeInitializationException: The type initializer for 'OpenCvSharp.CPlusPlus.Mat' threw an exception. ---> System.DllNotFoundException: Unable to load DLL 'OpenCvSharpExtern': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
   at OpenCvSharp.CPlusPlus.NativeMethods.core_Mat_sizeof()
   at OpenCvSharp.CPlusPlus.Mat..cctor()
   --- End of inner exception stack trace ---
   at OpenCvSharp.CPlusPlus.Mat..ctor()
   at MainClass.Main() in C:\Users\kotsias\Documents\Visual Studio 2015\Projects\MyCVSharp\ConsoleApplication1\Test.cs:line 14
Run Code Online (Sandbox Code Playgroud)

OpenCvSharpExtern.dll与我的 …

.net c# opencv

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

OpenGL ES - glReadPixels

我正在使用glReadPixels截取屏幕截图,以在两个图像之间执行"交叉"效果.

在Marmalade SDK模拟器上,屏幕截图很好,"交叉"效果很有效: 在此输入图像描述

然而,这是它在iOS和Android设备上的外观 - 已损坏:http: //www.eikona.info/images/81269689420703803966.png

我总是将屏幕视为RGBA 1字节/通道,因为文档说它总是被接受.

以下是用于截屏的代码:

uint8* Gfx::ScreenshotBuffer(int& deviceWidth, int& deviceHeight, int& dataLength) {

    /// width/height
    deviceWidth = IwGxGetDeviceWidth();
    deviceHeight = IwGxGetDeviceHeight();
    int rowLength = deviceWidth * 4; /// data always returned by GL as RGBA, 1 byte/each

    dataLength = rowLength * deviceHeight;

    // set the target framebuffer to read
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    glPixelStorei(GL_PACK_ALIGNMENT, 1);
    uint8* buffer = new uint8[dataLength];
    glReadPixels(0, 0, deviceWidth, deviceHeight, GL_RGBA, GL_UNSIGNED_BYTE, buffer);

    return buffer;
}

void Gfx::ScreenshotImage(CIwImage* img, …
Run Code Online (Sandbox Code Playgroud)

c++ android opengl-es ios marmalade

9
推荐指数
2
解决办法
6694
查看次数

迭代一个不断变化的容器

我正在迭代一组回调函数.函数在迭代期间被调用,并且可能导致对函数集的实际容器的急剧改变.

我现在在做的是:

  1. 制作原始集的副本
  2. 迭代复制,但是对于每个元素检查它是否仍然存在于原始集合中

检查每个元素的存在是超级动态的,但似乎也很慢.

还有其他建议来解决这个案子吗?

编辑:这是实际代码:

    // => i = event id
    template <class Param>
    void dispatchEvent(int i, Param param) {

        EventReceiverSet processingNow;

        const EventReceiverSet& eventReceiverSet = eventReceiverSets[i];
        std::copy(eventReceiverSet.begin(), eventReceiverSet.end(), std::inserter(processingNow, processingNow.begin()));

        while (!processingNow.empty()) {
            EventReceiverSet::iterator it = processingNow.begin();
            IFunction<>* function = it->getIFunction(); /// get function before removing iterator
            processingNow.erase(it);

            // is EventReceiver still valid? (may have been removed from original set)
            if (eventReceiverSet.find(ERWrapper(function)) == eventReceiverSet.end()) continue; // not found

            function->call(param);
        }
    };
Run Code Online (Sandbox Code Playgroud)

c++ iteration dynamic

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

Flash SecureSocket和RSA私钥

我正在尝试通过SSL与服务器通信.PEM客户端文件由证书和rsa私钥组成.

我设法将证书和密钥转换为二进制DER.我成功地将DER证书加载到SecureSocket(使用函数 addBinaryChainBuildingCertificate),但是当我尝试连接到服务器时,我收到"主要不匹配"错误.如果我尝试使用上述函数加载DER键,我会收到"错误的参数"错误.

我认为"主要不匹配"是因为我没有加载私钥.但是我没有看到将RSA密钥加载到SecureSocket的功能.这有什么解决方案吗?我是否需要仅使用证书与服务器通信,但从等式中删除密钥?

编辑:

代码:

package {

    import flash.display.Sprite;
    import flash.net.SecureSocket;
    import flash.net.URLLoader;
    import flash.events.ProgressEvent;
    import flash.events.Event;
    import flash.events.IOErrorEvent;
    import flash.net.URLLoaderDataFormat;
    import flash.net.URLRequest;
    import flash.utils.ByteArray;

    public class TestSSL2 extends Sprite {

        private var mSocket:SecureSocket = new SecureSocket();

        private var certFile:String = "ca.der";
        private var keyFile:String = "key.der";

        private var cert:ByteArray;
        private var key:ByteArray;

        public function TestSSL2() {
            trace("SecureSocket.isSupported",SecureSocket.isSupported);

            var urlLoader:URLLoader = new URLLoader();
            urlLoader.addEventListener(Event.COMPLETE, certLoaded, false, 0, true);
            urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
            urlLoader.load(new URLRequest(certFile));
        }
        private function certLoaded(e:Event):void { …
Run Code Online (Sandbox Code Playgroud)

flash ssl actionscript-3 private-key

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

模板类,包括C++中的保护

在模板类中包含保护是明智的吗?

每次使用不同的实现引用它们时,是不是应该重新分析模板类?

NB在Visual C++ 2008中,我没有将两者结合起来的错误......

c++ templates include-guards

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

建议如何命名"get/create&get"函数

我正在开发一个函数,它通过值(例如,通过名称)从容器(例如数组)返回一个对象.如果该对象尚不存在,则创建并返回该对象的默认副本(默认构造函数).

这样,无论对象在调用函数之前是否存在,该函数总是返回一个对象.

现在我的问题是:如何命名这个功能?GetOrCreateThenGet听起来很愚蠢.有任何想法吗?

编辑:我觉得这样的东西更接近函数的本质:GetForSure ...

naming

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