小编Pet*_*man的帖子

为什么C++允许未命名的函数参数?

以下是完全合法的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++ parameters function

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

如何使C++ lambda对象的存储更有效?

我一直在考虑最近存储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)

c++ c++11

21
推荐指数
3
解决办法
6464
查看次数

如何编写返回引用或值的函数模​​板?

我想编写一个函数模板,它根据一些编译时表达式返回一个引用或一个值.到目前为止我尝试的是这样的:

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,那么编译器会推断Funcas 的返回类型,Foo&&并警告我正在返回临时的地址.

有没有办法让这个工作,或者我被迫以某种方式分开两个分支(通过功能重载或一些这样的)?

c++ templates c++17

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

为什么我的ASP.NET MVC应用程序会在单个会话中多次触发Session_Start?

我们有一个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何时并不真正意味着会话已经结束.

asp.net asp.net-mvc

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

如何使用ITypeInfo指针获取类型的名称?

应该是一个简单的问题,但搜索文档让我疯了.假设我有一个coclass或接口的ITypeInfo指针.如何获取该类或接口的名称?

com automation

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

如何在代码中命名与iOS相关的元素?

我最近一直在做很多iPhone开发,我有一个命名问题,我想不出一个好的解决方案.问题是,我必须在变量,命名空间或类名中引用"iOS".我该怎么办?假设我有一个专为iOS设计的"MyClass"版本.我应该打电话给它:

iOSMyClass?

这是不好的.类名应该以大写字母开头.

IOSMyClass?

这是不好的.现在我的班级看起来像一个界面.

AppleMyClass?

这样更好,但是如果我为Mac创建一个类的版本呢?

AppleMobileMyClass?

这样更好,但它开始变得非常冗长.

有什么想法吗?我正在使用C#开发桌面软件.

c# iphone coding-style naming-conventions

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

为什么允许使用任意值初始化枚举类临时值?

我在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++ c++11

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

更简单的c ++模板编译错误输出

在C++中使用模板时,任何错误都会导致编译器发出大量输出.在大多数情况下,当我处理某些信息时,大部分信息都是噪音,我必须滚动查找我感兴趣的信息,例如:

  • 列出每个候选模板.我很少使用这个长列表,它只会使输出混乱.
  • 扩展了模板特化的别名,例如std::string,写为std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >或扩展的typedef/alias声明.我更希望将它们展开以便于阅读.

是否有可能在g ++或clang中减少任何这种更短/更简单的输出?

显然,信息可能很重要,但是我宁愿再次编译更详细,默认情况下保持简短.

c++ compiler-errors g++ clang++

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

如何使用Automapper将对象映射到未知目标类型?

请考虑以下情形.我有许多共享一个公共基类的类,我为每个派生类定义了一个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应该只能在给定源类型的情况下推断目标类型.

这有什么好办法吗?我想避免创建将源类型映射到目标类型的字典.虽然这可行,但这意味着我基本上必须为每种源类型定义两个映射.

c# automapper

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

如何获取 IADsUser 对象以与 Active Directory API 一起使用?

如何设置传入参数 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++ winapi active-directory

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