小编qua*_*tum的帖子

`is_base_of`是如何工作的?

以下代码如何工作?

typedef char (&yes)[1];
typedef char (&no)[2];

template <typename B, typename D>
struct Host
{
  operator B*() const;
  operator D*();
};

template <typename B, typename D>
struct is_base_of
{
  template <typename T> 
  static yes check(D*, T);
  static no check(B*, int);

  static const bool value = sizeof(check(Host<B,D>(), int())) == sizeof(yes);
};

//Test sample
class Base {};
class Derived : private Base {};

//Expression is true.
int test[is_base_of<Base,Derived>::value && !is_base_of<Derived,Base>::value];
Run Code Online (Sandbox Code Playgroud)
  1. 请注意,这B是私人基地.这是如何运作的?

  2. 注意operator B*()是const.它为什么如此重要?

  3. 为什么template<typename T> static yes …

c++ templates overloading type-traits implicit-conversion

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

使用SWIG的Perl中的STL映射

这与我在SWIG邮件列表上的问题重复.

我试图在我的SWIG绑定中使用stl容器.除了在Perl中进行stl映射处理外,一切都运行良好.在C++方面,我有

std::map<std::string, std::string> TryMap(const std::map<std::string, std::string> &map) {
  std::map<std::string, std::string> modified(map);
  modified["7"] = "!";
  return modified;
}
Run Code Online (Sandbox Code Playgroud)

SWIG配置看起来像这样

%module stl

%include "std_string.i"

%include "std_map.i"
%template(StringStringMap) std::map<std::string, std::string>;

%{
  #include "stl.h"
%}

%include "stl.h"
Run Code Online (Sandbox Code Playgroud)

在我的Python脚本中,我可以这样调用TryMap

print dict(stl.TryMap({'a': '4'}))
Run Code Online (Sandbox Code Playgroud)

并获得美丽的输出

{'a': '4', '7': '!'}
Run Code Online (Sandbox Code Playgroud)

但在Perl我打电话

print Dumper stl::TryMap({'a' => '4'});
Run Code Online (Sandbox Code Playgroud)

并得到一个错误

TypeError in method 'TryMap', argument 1 of type 'std::map< std::string,std::string > const &' at perl.pl line 7.
Run Code Online (Sandbox Code Playgroud)

我实际上可以做类似的事情

my $map = stl::TryMap(stl::StringStringMap->new());
print $map->get('7');
Run Code Online (Sandbox Code Playgroud)

并得到'!',但这不是一个选项,因为有很多遗留代码使用"TryMap",期望普通的Perl哈希作为其输出.

我相信有一种方法可以解决这个问题,因为如果我使用stl向量和字符串而不是map,SWIG可以很好地解决Python中的这个特殊问题,即使在Perl中也是如此.

有没有办法在SWIG中使用Perl处理stl映射?我正在使用最新的SWIG 2.0.7 …

perl swig

32
推荐指数
1
解决办法
1834
查看次数

什么是gcc中的-ffreestanding选项?

什么是ffreestandinggcc?它是干什么用的 ?我遇到了以下情况:

gcc -ffreestanding -m32 -c kernel.c -o kernel.o
Run Code Online (Sandbox Code Playgroud)

并且不明白,它究竟意味着什么.

c gcc compilation

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

如何使用spacy lemmatizer来获得基本形式的单词

我是新手,知道spacy并且我想使用他的lemmatizer功能,但我不知道如何使用它,就像我进入单词串,它将返回具有基本形式单词的字符串.比如'words'=> word,'did'=>'do',谢谢.

python nltk lemmatization spacy

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

如何在Python中找到最长的字符串?

类似的东西max(len(s1), len(s2))只会返回最大长度.但是如果我真的想找出哪个字符串更长,并且可能将它保存到另一个字符串,那怎么办呢?max(s1,s2)似乎返回值较大的字符串,但不一定是最长的字符串.

注意:必须在没有列表或数组的情况下完成此操作.

python string string-length

12
推荐指数
1
解决办法
5645
查看次数

何时应该在堆栈而不是堆上分配类

在过去,每当我需要创建一个类的实例时,我都会使用new在堆上分配它(除了stl类和数学类,如vec3和mat4).

但是,我只是批评我的一些代码,并意识到技术上我可以只是在堆栈上制作这些类.它们不是很大,不需要在当前范围之外进行修改等.当我(偶尔)需要将它们传递给另一个函数时,我可以像使用指针一样轻松地使用引用.

在过去,我总是默认在堆上进行分配,并且在某些情况下仅使用堆栈,但是现在我想知道默认情况下在堆栈上分配是否更好,并且仅在使用堆时

  • 确实需要一个指针(即对象的生命周期超出声明范围)
  • 类或数组对于堆栈来说太大了
  • 继承需要它(抽象基类/接口)
  • 别的什么?

这也提出了一个问题:一个类有多大(大致)在堆栈上合理分配?(假设我们正在努力,至少是智能手机,并进入高端桌面)我只是担心不必要的堆栈大小限制?(可能,只要我们不讨论大型数组,并且没有类甚至接近千字节)

c++

11
推荐指数
2
解决办法
2852
查看次数

为什么clock_nanosleep优于nanosleep来在C中创建睡眠时间?

这两个功能中哪一个更好

#include <time.h>
int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp);
Run Code Online (Sandbox Code Playgroud)

要么

#include <time.h>
int nanosleep(const struct timespec *rqtp, struct timespec *rmtp);
Run Code Online (Sandbox Code Playgroud)

c linux system-calls linux-kernel

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

哪个Twitter包装器库支持Python 3.x?

我想在使用Python 3.2构建的项目中添加对Twitter的支持,但我无法弄清楚哪些库支持它.

我做了一些谷歌搜索,我无法得出一个明确的答案; 我发现最接近的是Twython,在他们的自述文件中提到它是超级实验的,你需要一个黑客版本的python-oauth2,所以它基本上都是黑客攻击; 肯定有更好的东西吗?

python twitter python-3.x

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

SqlClient调用导致"线程在SNINativeMethodWrapper.SNIPacketGetConnection(IntPtr数据包)中被中止"

我真的很感激任何建议,无论多么简单或复杂,帮助我解决这个问题.

我有一些生成小报告文件的代码.对于集合中的每个文件,执行存储过程以通过XML阅读器获取数据(它是一个非常大的结果集).当我创造了这一切,并逐步完成它,一切都很好.生成文件,没有错误.

该库通过远程处理调用,并通过IIS托管.当我部署已编译的库并调用它时,它能够生成一些报告,但随后会抛出一个Thread Abort Exception.如果我将调试器附加到asp工作进程,并逐步执行代码,我没有问题.

看到这种失败是非常一致的,我寻找相似之处并发现失败发生在不同的报告上,但似乎发生在大约相同的时间点.

这让我认为这是一个超时设置,调试器重写,我做了一些粗略的整个过程时间(不是单一的失败代码),它似乎在大约200秒后失败.web.config executionTimeout设置为600分钟(足够高).此服务器应用程序还有其他部分需要COM +事务(2分钟超时),但这不是其中之一.我不知道它可能达到的超时时间(大约200秒大关).

SQL Connection超时默认保留(连接成功打开),命令超时为300秒(执行命令只需12-15).

  • 还有其他超时我可能会丢失吗?

我运行了SQL分析器,它显示结果正确返回(所有语句和RPC完成 - 没有错误).通过SSMS执行代码可提供完美的结果.

使用反射器,我钻进了SNINativeMethodWrapper,它是非托管代码的包装器,我无法看到它试图实际做什么.我只能假设(可能错误地)代码已经从SQL服务器接收到TDS,并且包装器试图获得与数据包关联的连接,但它不能.

  • 有谁知道这个包装器应该做什么?
  • 有没有办法跟踪/调试此代码以找出导致失败的原因?

我尝试使用不同的方法(ExecScalar,DataAdapter),但它们都在内部使用ExecuteReader.

我尝试禁用连接池并强制客户端使用与服务器相同的数据包大小.

  • 有没有人知道是什么导致了这个问题,或者我可以做些什么来隔离和尝试纠正问题?

这是生成异常的调用代码.

Private Function GetDataAsXmlDoc(ByVal cmd As SqlClient.SqlCommand) As XmlDocument

    Dim _xmlDoc As XmlDocument

    Using _connection As New SqlClient.SqlConnection(GetConnectionString())

        Logging.DebugEvent.Raise(Me.GetType.Namespace, Reflection.MethodBase.GetCurrentMethod().Name, _
                                 "No cached data found or used. Getting data for report from the database using SQL connection.")

        Dim _xmlReader As XmlReader
        'DataAdapter,ExecuteScalar, ExecuteXmlReader all use ExecuteReader internally and suffer the same problem.'
        'If you dont believe me, reflect it …
Run Code Online (Sandbox Code Playgroud)

vb.net ado.net iis-6 thread-abort

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

什么是Win32 API完全禁用任务管理器?

也就是说,即使按Ctrl+ Alt+ Del,也不应弹出任务管理器.

c winapi taskmanager

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