以下是完全合法的C++
代码
void foo (int) {
cout << "Yo!" << endl;
}
int main (int argc, char const *argv[]) {
foo(5);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想知道,如果有一个值可以在函数中留下未命名的参数,因为它们不能在函数内引用它们.
为什么这个合法开始?
我一直在考虑最近存储C++ lambda.您在Internet上看到的标准建议是将lambda存储在std :: function对象中.但是,这些建议都没有考虑存储的影响.在我看来,必须在幕后进行一些严肃的伏都教才能完成这项工作.考虑以下存储整数值的类:
class Simple {
public:
Simple( int value ) { puts( "Constructing simple!" ); this->value = value; }
Simple( const Simple& rhs ) { puts( "Copying simple!" ); this->value = rhs.value; }
Simple( Simple&& rhs ) { puts( "Moving simple!" ); this->value = rhs.value; }
~Simple() { puts( "Destroying simple!" ); }
int Get() const { return this->value; }
private:
int value;
};
Run Code Online (Sandbox Code Playgroud)
现在,考虑这个简单的程序:
int main()
{
Simple test( 5 );
std::function<int ()> f =
[test] () …
Run Code Online (Sandbox Code Playgroud) 我想编写一个函数模板,它根据一些编译时表达式返回一个引用或一个值.到目前为止我尝试的是这样的:
template<typename T>
auto&& Func()
{
if constexpr (some_compile_time_expression)
{
return GetReferenceFromSomewhere();
}
else
{
return GetValueFromSomewhere();
}
}
Run Code Online (Sandbox Code Playgroud)
这适用于所有类型的引用,但不适用于值.例如,如果GetValueFromSomewhere
返回a Foo
,那么编译器会推断Func
as 的返回类型,Foo&&
并警告我正在返回临时的地址.
有没有办法让这个工作,或者我被迫以某种方式分开两个分支(通过功能重载或一些这样的)?
我们有一个MVC.NET应用程序在重新启动时遇到致命错误.在我们的Session_Start事件处理程序中,我们将会话ID添加到字典中.在Session_End处理程序中,我们删除它.请考虑以下请求序列:
GET home.mvc
<application restarts>
GET main.css
GET banner.jpg
GET somedata.mvc
...
由于应用程序的架构方式,如果在浏览器窗口中打开应用程序时进行重建,则会发生此类序列.除了我在生产环境中看到它之外,这不会非常令人担忧.例如,编辑web.config时会发生(尽管很少).
重启后的请求都归因于主页中的链接或JavaScript的AJAX调用.
我观察到的是.NET并行处理前5个请求.每个这样的请求都会导致它触发Session_Start事件.片刻之后,它会激活Session_End事件3次.要清楚,每个Session_Start对应于完全相同的会话.它们都具有相同的会话ID,并且所有会话状态对象的IsNewSession属性都为true.此外,Session_End事件与被杀死的会话不对应.会话持续存在,以及存储在会话状态中的任何数据.
我需要阻止它多次触发Session_Start或者弄清楚如何判断Session_End何时并不真正意味着会话已经结束.
应该是一个简单的问题,但搜索文档让我疯了.假设我有一个coclass或接口的ITypeInfo指针.如何获取该类或接口的名称?
我最近一直在做很多iPhone开发,我有一个命名问题,我想不出一个好的解决方案.问题是,我必须在变量,命名空间或类名中引用"iOS".我该怎么办?假设我有一个专为iOS设计的"MyClass"版本.我应该打电话给它:
iOSMyClass?
这是不好的.类名应该以大写字母开头.
IOSMyClass?
这是不好的.现在我的班级看起来像一个界面.
AppleMyClass?
这样更好,但是如果我为Mac创建一个类的版本呢?
AppleMobileMyClass?
这样更好,但它开始变得非常冗长.
有什么想法吗?我正在使用C#开发桌面软件.
我在2014年的CppCon会谈中遇到了一些类似下面的代码,这些代码混淆了我.观众接受了它没有评论,所以我认为这是合法的:
enum class Foo { Bar };
Foo const v1 = Foo(5);
Run Code Online (Sandbox Code Playgroud)
问题是:为什么要编译?我希望编译失败并抱怨我们无法将int转换为Foo.下面略微修改的行失败,出现预期的错误:
Foo const v1(5);
Run Code Online (Sandbox Code Playgroud) 在C++中使用模板时,任何错误都会导致编译器发出大量输出.在大多数情况下,当我处理某些信息时,大部分信息都是噪音,我必须滚动查找我感兴趣的信息,例如:
std::string
,写为std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
或扩展的typedef/alias声明.我更希望将它们展开以便于阅读.是否有可能在g ++或clang中减少任何这种更短/更简单的输出?
显然,信息可能很重要,但是我宁愿再次编译更详细,默认情况下保持简短.
请考虑以下情形.我有许多共享一个公共基类的类,我为每个派生类定义了一个automapper映射.像这样的东西:
class A : Base {}
class B : Base {}
class ContractA : ContractBase {}
class ContractB : ContractBase {}
void Foo()
{
Mapper.CreateMap<A, ContractA>();
Mapper.CreateMap<B, ContractB>();
}
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但现在我想创建一个这样的方法:
ContractBase Foo()
{
Base obj = GetObject();
return Mapper.???
}
Run Code Online (Sandbox Code Playgroud)
问题是所有AutoMapper的Map变体都要求我在编译时知道目标类型,或者在运行时使用该类型的对象.这非常令人沮丧,因为我为每种源类型只定义了一个映射.AutoMapper应该只能在给定源类型的情况下推断目标类型.
这有什么好办法吗?我想避免创建将源类型映射到目标类型的字典.虽然这可行,但这意味着我基本上必须为每种源类型定义两个映射.
如何设置传入参数 pUser 传递到此函数 CheckUserGroups(IADsUser *pUser) 中?我在另一篇文章上看到了函数,但他们没有详细解释它:Need toretrieve all groups a user所属... in C++
请指教。
HRESULT CheckUserGroups(IADsUser *pUser)
{
IADsMembers *pGroups;
HRESULT hr = S_OK;
hr = pUser->Groups(&pGroups);
pUser->Release();
if (FAILED(hr)) return hr;
IUnknown *pUnk;
hr = pGroups->get__NewEnum(&pUnk);
if (FAILED(hr)) return hr;
pGroups->Release();
IEnumVARIANT *pEnum;
hr = pUnk->QueryInterface(IID_IEnumVARIANT,(void**)&pEnum);
if (FAILED(hr)) return hr;
pUnk->Release();
// Enumerate.
BSTR bstr;
VARIANT var;
IADs *pADs;
ULONG lFetch;
IDispatch *pDisp;
VariantInit(&var);
hr = pEnum->Next(1, &var, &lFetch);
while(hr == S_OK)
{
if (lFetch == 1)
{ …
Run Code Online (Sandbox Code Playgroud) c++ ×6
c# ×2
c++11 ×2
asp.net ×1
asp.net-mvc ×1
automapper ×1
automation ×1
c++17 ×1
clang++ ×1
coding-style ×1
com ×1
function ×1
g++ ×1
iphone ×1
parameters ×1
templates ×1
winapi ×1