小编Dav*_*vid的帖子

虚函数是否覆盖基类中同名的非虚函数?

以下标准是否符合要求?你能举这个部分吗?

struct A
{
    virtual void func() = 0;
};

struct B
{
    void func(){}
};

struct C : public A, public B
{
    virtual void func(){ B::func(); }
};
Run Code Online (Sandbox Code Playgroud)

我在VS2010中得到了一个奇怪的编译器警告,它在同等但更复杂的代码中指向func派生最多类中的声明:warning C4505: unreferenced local function has been removed.我不知道为什么编译器认为在类中声明的虚函数是本地的; 但是我不能在一个更简单的例子中重复这个警告.

编辑:

我想出了一个小警告的重复案例.假设它与函数隐藏有关,我认为我走错了路.这是repro案例:

template<typename T>
struct C
{
    int GetType() const;
    virtual int func() const;   // {return 4;}  //  Doing this inline removes the warning <--------------
};

template<typename T>
int C<T>::GetType() const
{
    return 0;
}

template<>
int …
Run Code Online (Sandbox Code Playgroud)

c++

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

如何将通用的packaged_tasks存储在容器中?

我正试图采用一种"任务"的风格std::async并将其存放在容器中.我不得不跳过篮球来实现它,但我认为必须有更好的方法.

std::vector<std::function<void()>> mTasks;

template<class F, class... Args>
std::future<typename std::result_of<typename std::decay<F>::type(typename std::decay<Args>::type...)>::type>
push(F&& f, Args&&... args)
{
    auto func = std::make_shared<std::packaged_task<typename std::result_of<typename std::decay<F>::type(typename std::decay<Args>::type...)>::type()>>(std::bind(std::forward<F>(f), std::forward<Args>(args)...));
    auto future = func->get_future();

    // for some reason I get a compilation error in clang if I get rid of the `=, ` in this capture:
    mTasks.push_back([=, func = std::move(func)]{ (*func)(); });

    return future;
}
Run Code Online (Sandbox Code Playgroud)

所以我正在使用bind- > packaged_task- > shared_ptr- > lambda- > function.我怎样才能更好/更优化?如果有一个std::function可以采取不可复制但可移动的任务,那肯定会更容易.我可以std :: forward …

c++ multithreading c++11 c++14

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

快速捕获调用堆栈

我正试图尽快捕获调用堆栈.现在这就是我所拥有的:

void* addrs[10] = {};
DWORD hash;
RtlCaptureStackBackTrace(0, 10, addrs, &hash);

for( size_t i = 0; i <10; ++i )
{
    std::cout << addrs[i] << '\n';
}
Run Code Online (Sandbox Code Playgroud)

这是用于内存跟踪系统,因此如果以后(在某些用户驱动的事件中)可以变成人类可读的东西,我最终会得到一个地址数组.

  • 我怎样才能addrs变成人类可读的东西?(见下面的编辑)
  • 还有什么比这更快的RtlCaptureStackBackTrace
  • 是否有跨平台方式来捕获调用堆栈?

编辑:

我使用SymFromAddr和将地址转换为人类可读的信息SymGetLineFromAddr64.然而,我的版本new,它使用CaptureStackBackTrace大约需要30倍的时间比原来几乎所有的时间是因为堆栈跟踪.我还在寻找更快的解决方案!

c++ windows visual-studio-2010

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

如何在现代C++中使用异常?

目前我们只抛出由外部源(例如数据)导致的不可恢复的故障,并且在整个执行过程中只有一次尝试捕获.

何时/为什么/如何在现代C++中使用异常?

C++ 11是否改变了上述问题的答案?

c++ exception-handling c++11

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

什么是 ABI,为什么 C++ 没有标准的,如果它有为什么重要?

什么是 ABI,为什么 C++ 没有标准的,如果它有为什么重要?

c++

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

static_if是否会弃用模板专精?

一些通常的模板专业化如下:

template<class T>
class C
{
    void common() { ... }
    void f2 = delete;
};

template<>
class C<int>
{
    void common() { ... }
    void f1() { ... }
};
Run Code Online (Sandbox Code Playgroud)

可以表示static_if为:

template<class T>
class C
{
    void common() { ... }

    static_if(std::is_same<T, int>::value)
    {
        void f1( ) { ... }
    }
    else
    {
        void f2( ) = delete;
    }
}
Run Code Online (Sandbox Code Playgroud)

这些是直接竞争的功能吗?模板专业化static_if可以做些什么不可以吗?似乎static_if可以做模板专业化所能做的一切,还有更多.

暂且不说:我不喜欢static_if在这种情况下,因为它可能使得在任何特定情况下你可以使用界面的哪些部分是不明显的.在某些情况下,模板特化仍然可以提供更清晰的语法.

c++ templates template-specialization static-if c++14

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

为MediaCodec设置的有效比特率是多少

我正在使用MediaCodec来自相机的视频编码:

MediaFormat format = MediaFormat.createVideoFormat("video/avc", width, height);
        format.setInteger(MediaFormat.KEY_BIT_RATE, 250000);
        format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 1);
        format.setInteger(MediaFormat.KEY_FRAME_RATE, 15);
        format.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
        _mediaCodec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
Run Code Online (Sandbox Code Playgroud)

我发现根据我给出的分辨率,有一些最小有效比特率要设置.如果我在该数量下设置比特率,则完全被忽略.如果我将比特率设置为高于此不可见阈值,则按预期工作.我想要做的是查询我可以KEY_BIT_RATE为任何给定分辨率设置的最小比特率.当我设置一个没有任何影响的比特率时,不会抛出任何错误或任何错误.

java encoding android mediacodec

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

weak_ptr的怪异拷贝构造函数

以下是weak_ptr的构造函数中的两个:http: //msdn.microsoft.com/en-us/library/bb982126.aspx

weak_ptr(const weak_ptr&);

template<class Other>
weak_ptr(const weak_ptr<Other>&);
Run Code Online (Sandbox Code Playgroud)

实际代码(来自memory):

weak_ptr(const weak_ptr& _Other)
{   // construct weak_ptr object for resource pointed to by _Other
    this->_Resetw(_Other);
}

template<class _Ty2>
weak_ptr(const weak_ptr<_Ty2>& _Other,
         typename enable_if<is_convertible<_Ty2 *, _Ty *>::value,
         void *>::type * = 0)
{   // construct weak_ptr object for resource pointed to by _Other
    this->_Resetw(_Other);
}
Run Code Online (Sandbox Code Playgroud)

Q1:为什么顶级拷贝构造函数就在那里?它看起来像每个案例的底部(包括前一个).它甚至被调用了吗?如果它们没有包含它,那么底部的它会占据它的位置吗?

Q2:底层(模板化)构造函数的第二个参数发生了什么.我想我理解SFINAE方面,但我不明白为什么有一个额外的*之后::type

c++ shared-ptr weak-ptr c++11

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

共享指针释放

可能的重复:
如何从 boost::shared_ptr 释放指针?
从shared_ptr 中分离指针?

我正在尝试释放一个shared_ptr(您可以释放一个unique_ptr)。我知道当shared_ptr不唯一时这没有意义,但我有一个保证是唯一的shared_ptr。我试过了...

m_pObj.reset((T*)nullptr, [](T* const){});
Run Code Online (Sandbox Code Playgroud)

...但它只是删除了该对象。我不确定如果shared_ptr最终调用delete,删除器参数有什么用处。

有什么方法可以实现这一点(如果没有其他方法,欢迎使用VS2010特定的解决方案)。

c++ shared-ptr c++11

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

模板类的方法是否暗示内联链接?

模板类的方法是否隐含了inline链接(不是在谈论内联优化),还是只是模板化的方法?

// A.h

template<typename T>
class A
{
public:
    void func1();                       //  #1
    virtual void func2();               //  #2
    template<typename T2> void func3(); //  #3
};

template<typename T>
void A<T>::func1(){}    //  #1

template<typename T>
void A<T>::func2(){}    //  #2

template<typename T>
template<typename T2>
void A<T>::func3<T2>(){}    //  #3
Run Code Online (Sandbox Code Playgroud)

以上所有案例都是inline[联系]吗?(我应该明确写inline任何一个)?

c++ templates inline linkage

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