小编Kir*_*lev的帖子

C中的通用哈希表

我试图在C中创建一个通用哈希表。我已经阅读了几种不同的实现,并遇到了几种不同的方法。

首先是使用像这样的宏:http : //attractivechaos.awardspace.com/khash.h.html

第二种是使用带有2个void指针的结构,如下所示:

struct hashmap_entry
{
    void *key;
    void *value;
};
Run Code Online (Sandbox Code Playgroud)

据我所知,这种方法并不是很好,因为它意味着映射中的每个条目都至少需要2种分配:一种分配给键,一种分配给值,而与存储的数据类型无关。(那正确吗???)

如果没有采用宏路由,就无法找到一种使它通用的不错的方法。有人有任何提示或示例可以帮助我吗?

c hashtable hashmap

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

如果我不将它存储在任何地方,返回值会发生什么变化?

在下面的小样本中:

#include<iostream>
using namespace std;

int z(){
    return 5 + 10; // returns 15
}

int main(){
    z(); // what happens to this return?
    cout << "Did not fail";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

15岁会怎么样?我尝试在调试器中运行它,但我无法在任何地方找到它.我认为,因为它没有被分配到任何东西它只是消失但我觉得这是错的.

今天我向TA询问了这个问题,他告诉我它存储在调用堆栈中,但是当我在调试器中查看它时,我发现它不是.

c++

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

有没有办法让我的二进制文件对 Linux 中的某些全局热键做出反应?

是否可以监听某个热键(例如:Ctrl-I)然后执行特定操作?我的应用程序是用 C 编写的,只能在 Linux 上运行,并且没有 GUI。有没有任何库可以帮助完成此类任务?

编辑:例如,amarok 具有全局快捷键,因此,例如,如果您将按键组合映射到一个操作(比方说Ctrl-+Ctrl+),您可以在按下按键时执行该操作。如果我要映射Ctrl-+到音量增加操作,则每次按下时ctrl-+音量都会增加一定的量。

谢谢

c linux hotkeys

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

我总是使用.css文件吗?

是否.css总是需要文件?或者我可以有一个.css"基本"文件并在HTML页面中定义其他样式项?

padding,borders等等总是有一个被定义.css的,单独存储文件,或者我可以再嵌入到HTML页面?

html css

4
推荐指数
2
解决办法
491
查看次数

使用引用基类的成员模板的声明.

任何人都可以解释这个

 "A using-declaration in a derived class cannot refer to a specialization 
 of a template conversion function in a base class."
Run Code Online (Sandbox Code Playgroud)

它来自ISO C++标准.14.5.2,第7点

c++ templates

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

针对非类型参数的特定值的模板代码优化.

template <bool flag>
class foo
{
    public:
        int bar()
        {
            if(flag)
            {
                // stuff
            }
        }
};
Run Code Online (Sandbox Code Playgroud)

当编译器编译此类时,它会将flag参数替换为true或false.然后我们有if(true)(或者if(false)).然后,if子句检查常量表达式并在编译时将被删除.我能指望编译器表现得像这样吗?

c++ templates boolean constants

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

无法访问已处置的对象 - wcf客户端

我有一个WCF客户端,我遇到了问题.
我不时会遇到这个例外:Cannot access a disposed object.这就是我打开连接的方式:

private static LeverateCrmServiceClient crm = null;

public static CrmServiceClient Get(string crmCertificateName)
        {

            if (crm != null)
            {
                crm.Close();
            }
            try 
            {
                crm = new LeverateCrmServiceClient("CrmServiceEndpoint");
                crm.ClientCredentials.ClientCertificate.SetCertificate(
                               StoreLocation.LocalMachine,
                               StoreName.My,
                               X509FindType.FindBySubjectName,
                               crmCertificateName);
            }
            catch (Exception e) 
            {
                log.Error("Cannot access CRM ", e);
                throw;
            }
            return crm;
        }
Run Code Online (Sandbox Code Playgroud)

如您所见,我每次都关闭并重新打开连接.您认为可能是什么问题?

堆:

System.ServiceModel.Security.MessageSecurityException: Message security verification failed. ---> System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'System.ServiceModel.Security.SymmetricSecurityProtocol'.
  at System.ServiceModel.Channels.CommunicationObject.ThrowIfClosedOrNotOpen()
  at System.ServiceModel.Security.MessageSecurityProtocol.VerifyIncomingMessage(Message& message, TimeSpan timeout, SecurityProtocolCorrelationState[] correlationStates)
  --- …
Run Code Online (Sandbox Code Playgroud)

c# wcf-client objectdisposedexception

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

Visual-C++ malloc实现?

我正在研究malloc我的作业的实施.

我知道有一些版本的malloc实现,比如glibc使用的ptmalloc和FreeBSD使用的jemalloc.

我想知道Visual C++采用哪种版本的实现?或者VC++团队刚刚实现了自己的版本?

c++ malloc visual-c++

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

operator new已经有了一个正文

我正在尝试使用参数作为全局实现operator new.如果没有args的new被重载没有问题,但是在尝试编译时我遇到了以下错误

inline void* operator new(size_t, void* p) {
    //...
    return p;
}
Run Code Online (Sandbox Code Playgroud)

c:\ bjarne_exercise_6.cpp(14):错误C2084:函数'void*operator new(size_t,void*)throw()'已经有一个正文c:\ program files\microsoft visual studio 10.0\vc\include \new( 55):看看'new'的先前定义

c:\ bjarne_exercise_6.cpp(40):错误C2264:'operator new':函数定义或声明中的错误; 功能未被调用

我刚刚解决了这个问题,你必须在#include stdafx.h之前声明这个.不,不是真的.它编译得很好,但仍然没有调用此函数,但是来自新头文件的版本.是这样,因为新标题中已经定义了新的(有2个参数).普通的new(只有1,size_t参数)只在那里声明,所以你仍然可以重载它.因此,如果你想要带有多个参数的特殊new,下面的@trion建议的解决方案是合适的.

c++ operators new-operator

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

C/C++大数计算

我正在尝试在C程序中计算以下数字:

result = (3 * pow(2,500000000) - 2 ) % 1000000000
Run Code Online (Sandbox Code Playgroud)

2的力量是大到正确处理的方式=>我的印象是我可以使用模数在许多步骤中拆分计算以减小结果大小.有人有这样做的策略吗?还有其他想法吗?

Thanx提前

马努

c c++ math numbers modulo

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