注意:我发现错误的来源实际上与shared_ptr无关,只是在错误消息中巧妙地伪装.因此,下面基本上是无稽之谈(不是答案,他们很好)
-
我在使用shared_ptr
(目前的提升)时遇到了一些麻烦,我需要简单地将指针转发给另一个函数.使用本机指针,介入函数不需要访问类的定义,但是使用smart_ptr它就可以了.有什么方法可以避免这种情况吗?
例如,给定目标函数:
void func( shared_ptr<SomeClass> const & obj )
Run Code Online (Sandbox Code Playgroud)
该const &
负责的问题的一部分,而是说我们有一个getter类获得对象为其他类,如:
shared_ptr<SomeClass> someClassInstance();
Run Code Online (Sandbox Code Playgroud)
这里是我想简单地组装参数并转发到目标函数的地方:
func( someClassInstance() );
Run Code Online (Sandbox Code Playgroud)
使用普通指针,代码中的这一点可以简单地使用前向声明SomeClass
,但是smart_ptr
需要具有完整定义(可能是因为smart_ptr可能需要删除该类).
现在,如果someClassInstance
要返回const &
这个问题实际上会消失,因为介入的代码不会复制任何对象.但是,出于线程安全原因,getter函数必须返回副本.
无论如何我可以实现这种类型的智能指针参数转发而不需要类定义吗?也就是说,我可以像在这种情况下使用传统指针一样使用智能指针.
-
更新:写一个小测试答案是正确的,前向声明就足够了.然而海湾合作委员会仍然在一种情况下抱怨.我将不得不弄清楚导致它失败的原因(在这种特殊情况下).
我现在暂时关闭这个问题,或者什么?
我希望获得标准布局成员变量的偏移量,当为该变量提供一个poiner时.offsetof
因为我有一个指针而不是一个名字,所以我无法使用.我当前的代码看起来像这样,我想知道是否有符合标准的方法来摆脱dummy
变量.
template<class T>
struct {
ptrdiff_t get_offset( int (T::*mem) )
{
T dummy;
return reinterpret_cast<char*>(&(dummy.*mem))
- reinterpret_cast<char*>(&dummy);
}
};
Run Code Online (Sandbox Code Playgroud)
此函数只能使用int
成员变量点进行调用(这是有意的).
我很确定编译器实际上并没有创建dummy
变量,但如果我能摆脱它,它仍然很好.我不能使用空指针,因为未定义解除引用null(尽管它可能适用于所有常见的编译器).C++ 03解决方案会很好,或者C++ 11解决方案也很有用(但现在我无法使用).
注意:我已经知道这只是标准兼容T是标准布局类型.
如何链接到锚A
标记中的其他AngularJS应用程序位置?我正在使用HTML5无散列模式,并希望避免让页面实际重新加载.
例如,在非HTML5模式下,我会这样做:
<a href='#/path'>Link</a>
Run Code Online (Sandbox Code Playgroud)
在HTML5模式下,我可以这样做:
<a href='/path'>Link</a>
Run Code Online (Sandbox Code Playgroud)
但这实际上会导致浏览器重新加载新的URL.我也试过使用ng-href
和/#/path
语法,但它们似乎都没有像我想的那样工作.
如何从锚标签正确链接?
是否有类型特征模板,它返回给定类型的基本类型.通过碱型我的意思是与所有值调节剂,const的,易失性类型等剥离.例如,使用假设特征函数:
base<int>::type == int
base<int const>::type == int
base<int&>::type == int
Run Code Online (Sandbox Code Playgroud)
我知道remove_const
并且remove_reference
目前正在组合使用它们.我想知道是否存在这样的特征,或许是否有一个正确的名称我所指的是什么?
我想定义一个模板函数,但不允许使用特定类型进行实例化.请注意,通常允许所有类型并且通用模板有效,我只想禁止使用一些特定类型.
例如,在下面的代码中,我希望阻止使用double
模板.这实际上并不会阻止实例化,但只是因为没有定义函数而导致链接器错误.
template<typename T>
T convert( char const * in )
{ return T(); }
//this way creates a linker error
template<>
double convert<double>( char const * in );
int main()
{
char const * str = "1234";
int a = convert<int>( str );
double b = convert<double>( str );
}
Run Code Online (Sandbox Code Playgroud)
代码只是一个演示,显然转换函数必须做更多的事情.
问题:在上面的代码中,如何在尝试使用convert<double>
实例化时产生编译器错误?
我能找到的最接近的相关问题是如何在模板实例化时故意造成编译时错误它处理的是类,而不是函数.
我需要这样做的原因是因为我希望阻止的类型实际上会编译并使用通用版本执行某些操作.但是,这不应该是函数合同的一部分,并且可能不会在所有平台/编译器和未来版本中受支持.因此,我想完全避免使用它.
我正在使用Flask并且拥有需要授权的端点(有时还需要其他特定于应用程序的标头).在我的测试中使用该test_client
函数创建一个客户端,然后执行各种get,put,delete调用.所有这些调用都需要授权,并且要添加其他标头.如何设置测试客户端以将这些标头放在所有请求上?
我使用的是mocha
与chai.assert
我的测试.捕获并报告错误,但它们不会显示文件/行号.我习惯用其他语言的测试来获取位置信息,否则很难弄清楚哪个断言失败了.
有没有办法用mocha/chai/assert获取位置信息?
有没有办法可以检查我的烧瓶应用程序是否正在运行一个gunicorn容器?目前我设置了一个环境变量来告诉我的应用程序,但我更喜欢它是自动的.另外,有没有我可以检查正在使用的工人类?
我需要从几个不同的原因检测到这一点.请注意,通常我使用gunicorn,但在测试期间我有时不会.
我的服务器执行外部请求,我想限制失败请求可以造成的损害.我想在这些情况下取消请求:
注意我不是timeout
在请求中查找参数,因为这只是不活动的超时.我无法找到与总超时或限制总大小的方法有关的任何事情.一个示例显示了maxsize
参数,HTTPAdapter
但未记录.
我怎样才能使用这些要求requests
?