小编Jul*_*ult的帖子

类中结构字段的保护级别

我对C#编程很新,所以这可能是一个初学者的问题.

我得到一个"'A.Test.That.Fails'由于其保护级别而无法访问"以下代码片段的错误,我无法理解原因.

namespace A
{
    class Test
    {
        public void Demo()
        {
            That[] it = new That[42];
            it[0].fails = 21;
        }

        public struct That
        {
            int fails;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

来自C++编程,并且已经读过保护规则几乎相同,因为有一个类我会期望它能够工作,即使That结构和Demo方法都是如此private.

正如旁注所示,非常感谢指向C++程序员的一些页面总结范围和保护规则的链接.

c# struct visibility protection

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

在没有探查器的情况下分析图形渲染

现在我们有非常先进的工具来消除渲染,允许看到不同的阶段,绘制调用所花费的时间等等.但是如果没有它们,图形管道在理解内部发生的事情时就是一个黑盒子.

假设由于某种原因你没有这样的工具或者非常有限的工具.无论如何,你会如何衡量渲染中的时间?

我知道丢弃绘制调用以查看CPU时间,设置1x1视口以查看几何体成本,使用哑片段着色器突出显示填充率等技巧...它们已经很有用但只能粗略地了解一下正在进行,并没有告诉并行性的水平.

此外,在每个绘图调用的每个阶段花费的时间似乎很难,特别是考虑到测量时由于噪声导致的精度不足.

当您的背包几乎是空的并且您仍需要描绘您的渲染时,您使用了哪些技巧?你的瑞士军刀是什么?

opengl profiling rendering

9
推荐指数
1
解决办法
2868
查看次数

在Visual Studio 2010编译选项中启用C++异常

我正在尝试编译此源代码:

// exception_set_unexpected.cpp
// compile with: /c /EHsc
#include<exception>
#include<iostream>

using namespace std;

void unfunction( ) 
{
   cout << "I'll be back." << endl;
   terminate( );
}

int main( ) 
{
   unexpected_handler oldHand = set_unexpected( unfunction );
   unexpected( );
}
Run Code Online (Sandbox Code Playgroud)

如何compile with: /c /EHsc在Visual Studio 2010中添加选项?

c++ visual-studio-2010 c++11

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

成员和XML命令后的Doxygen文档

我试图从doxygen和IntelliSense中获得最大收益,并发现XML命令在这里是一个不错的选择:一方面生成文档,另一方面在完成时显示文档。

吸引人的地方之一是成员之后的内联文档。

doxygen的说明书只提到一个拥有成员后的文档的方式:///<。不幸的是,它与Visual Studio冲突,如下所示:

enum
{
    A, ///< Doxygen understands this, but IntelliSense is oblivious to it.
    B, ///  <summary>IntelliSense understands this, but Doxygen applies it to the wrong member.</summary>
    C, ///< <summary>Doxygen understand this, but IntelliSense considers it to be invalid XML.</summary>
};
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以以Doxygen和Visual Studio都正确理解的方式在XML成员之后编写文档,还是我应该退一步评论前一行?

intellisense doxygen xml-comments visual-studio

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

如何使用 pybind11 和 NumPy 公开不透明类型的数组

长话短说

使用pybind11 ,如何使用NumPy公开 POD 结构数组,同时让它们向用户显示为漂亮的 Python 对象?

问题

我使用pybind11Python公开C 风格 API。有一些类型在 C 中实现为简单的 POD 结构,在 Python 中作为不透明对象更有意义。pybind11允许我做到这一点并定义对象在 Python 中的样子。

我还想公开一个动态分配的数组。使用pybind11NumPy这样做 是可能的,但我还没有找到一种与我已经公开类型本身的方式兼容的方法。

我最终得到了两种不同的 Python 类型,尽管底层的 C 类型是相同的,但它们彼此不兼容。

约束条件

我正在寻找一种不涉及不必要副本的解决方案。由于所有数据都是 POD,我认为应该可以将数据重新解释为 C 端的结构或 Python 端的不透明对象。

C API 是固定的,但我可以自由地设计 Python API。

实施细节

在 C/C++ 方面,类型如下所示:

struct apiprefix_opaque_type
{
    int inner_value;
};
Run Code Online (Sandbox Code Playgroud)

使用pybind11,我将结构公开为不透明对象。不暴露并不重要inner_value,但它对用户来说根本没有太大价值,拥有更高级别的类型更有意义。

namespace py = pybind11;

void bindings(py::module_& m)
{
    py::class_<apiprefix_opaque_type>(m, "opaque_type")
        .def(py::init([]() { …
Run Code Online (Sandbox Code Playgroud)

python arrays api-design numpy pybind11

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

C++中嵌套类作为父类的模板参数

我想将算法实现为派生自纯虚拟类的类,代表特定算法解决的问题类型。

\n\n

通用界面如下所示:

\n\n
template<typename A, typename B>\nclass ISolutionToProblem\n{\npublic:\n    virtual void Init(const A & input, const B & param) = 0;\n    virtual const B & ComputeSolution() = 0;\n\n    virtual ~ISolutionToProblem() {}\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n

其实现例如是:

\n\n
template<typename T>\nclass MyAlgorithm:\n    public ISolutionToProblem<typename MyAlgorithm<T>::WorkData, T>\n{\npublic:\n    struct WorkData { /* Stuff using T... */ };\n    virtual void Init(const WorkData & input, const T & param);\n    virtual const T & ComputeSolution();\n\nvirtual ~MyAlgorithm();\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n

(更具体地说,问题实际上是路径查找,但我认为这不相关)

\n\n

我的问题是继承部分:我使用嵌套结构作为模板参数,无论我如何很好地与编译器交谈,它都会拒绝编译我的代码。

\n\n

我可以偷懒,只是将内部结构放在类之外,但如果可能的话,我更希望它整齐地放置在类中。

\n\n
    \n
  1. 那么我想做的事情实际上是可能的吗(在 C++98 中)?
  2. \n
  3. 如果是的话我该怎么写呢?(如果你让我理解为什么语法不接受上面的形式,那就加分了)
  4. \n …

c++ syntax inheritance templates nested-class

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