小编HC4*_*ica的帖子

WPF ScrollViewer问题

我试图在我的程序中使用一个简单的ScrollViewer,但我遇到了问题.

如果我将所有内容都包含在ScrollViewer中的程序中,它可以正常工作:

<Window x:Class="WpfTest.MainWindow"         
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow"
        Name="PrimaryWindow">
    <ScrollViewer>
        <StackPanel>
            <Menu Height="21" VerticalAlignment="Top">
                <MenuItem Header="File"/>
                <MenuItem Header="Edit"/>
            </Menu>
            <StackPanel>
                <TextBlock Text="1"/>
                <TextBlock Text="2"/>
                <TextBlock Text="3"/>
                <TextBlock Text="4"/>
                <TextBlock Text="5"/>
                <TextBlock Text="6"/>
                <TextBlock Text="7"/>
                <TextBlock Text="8"/>
                <TextBlock Text="9"/>
                <TextBlock Text="10"/>
            </StackPanel>
        </StackPanel>
    </ScrollViewer>
</Window> 
Run Code Online (Sandbox Code Playgroud)

但是,由于菜单是ScrollViewer的一部分,当用户向下滚动时,菜单会滚动屏幕.所以我只将ScrollViewer放在菜单下的控件周围:

<Window x:Class="WpfTest.MainWindow"         
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow"
        Name="PrimaryWindow">
    <StackPanel>
        <Menu Height="21" VerticalAlignment="Top">
            <MenuItem Header="File"/>
            <MenuItem Header="Edit"/>
        </Menu>
        <ScrollViewer>
            <StackPanel>
                <TextBlock Text="1"/>
                <TextBlock Text="2"/>
                <TextBlock Text="3"/>
                <TextBlock Text="4"/>
                <TextBlock Text="5"/>
                <TextBlock Text="6"/>
                <TextBlock Text="7"/>
                <TextBlock Text="8"/>
                <TextBlock Text="9"/>
                <TextBlock …
Run Code Online (Sandbox Code Playgroud)

c# wpf scrollviewer

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

条件表达式中的右值引用

typedef decltype(true ? (long&&)0 : (long&&)0) T;
Run Code Online (Sandbox Code Playgroud)

应该是什么?

根据gcc(4.7),它是long.根据clang(trunk),它是long&&.这种差异导致clang无法编译使用gcc 4.7的libstdc ++的代码.谁是对的?

更新:正如ildjarn指出的那样,Clang是对的,正如Richard Smith指出的那样,错误libstdc ++是由于标准中的错误引起的.以下是相关的GCC错误以及相关的缺陷报告.

c++ gcc clang decltype c++11

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

using-declaration是否仅导入在using-declaration之上声明的重载?

例如,GCC和clang都无法编译以下代码:

struct S {};

namespace N
{
    void g(S);
}

using N::g;

namespace N
{
    void g(int);
}

int main()
{
    g(0);
}
Run Code Online (Sandbox Code Playgroud)

有错误:

test.cpp: In function 'int main()':
test.cpp:17:8: error: could not convert '0' from 'int' to 'S'
     g(0);
        ^
Run Code Online (Sandbox Code Playgroud)

建议using声明仅导入在using声明出现点之上声明的重载,而不是稍后出现的(但在使用名称之前).

这种行为是否正确?

c++ scope overloading namespaces using-declaration

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

不相关的已删除运算符会更改重载决策的行为

我今天遇到了一个奇怪的情况,声明一个带有某些参数的已删除运算符改变了看似无关的代码的行为.

我将它减少到以下.从这开始:

namespace N 
{
    enum E { A, B };

    struct C 
    {   
        C(E);
    private:
        C(int);
    };  
}

N::E operator|(N::E, N::E);

namespace N
{
    void Waldo()
    {   
        C(A | B); 
    }   
}
Run Code Online (Sandbox Code Playgroud)

请注意,C有两个构造函数,一个是公共的,另一个是私有的.此代码编译,表明正在选择公共重载,因此表达式A | B具有类型E.反过来,这也意味着,operator|(N::E, N::E)已被匹配(否则AB将接受隐式转换为整数的类型,A | Bint和私人构造函数相匹配.

到现在为止还挺好.现在我定义一个新的枚举类型F,并删除operator|涉及F:

namespace N 
{
    enum E { A, B };

    struct C 
    {   
        C(E);
    private:
        C(int);
    };  
}

N::E operator|(N::E, N::E);

namespace N …
Run Code Online (Sandbox Code Playgroud)

c++ enums namespaces overload-resolution c++11

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

输入'export VARIABLE =〜/'后按<tab>键'VARIABLE ='

我在bash中遇到以下行为,我觉得很烦人:

  1. 类型 export VARIABLE=~/
  2. 现在我想为路径的下一段自动完成,所以我按<tab>.
  3. Bash clobbers VARIABLE=,只留下export ~/.

为什么会这样?

我的bash版本是4.3.33,OS是Debian测试,终端是Konsole.

bash tab-completion

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

是否有任何理由按价值捕获异常?

Sutter和Alexandrescu的编码标准告诉我们通过引用捕获异常.

当然,像这样的一揽子建议通常会偶尔有例外(没有双关语意).是否有任何使用案例,首选按值列出异常?

c++ exception-handling

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

基类的嵌套类的外部定义

以下代码是否有效?

struct A 
{
    struct nested;
};

struct B : public A {};

struct B::nested {};
Run Code Online (Sandbox Code Playgroud)

gcc接受它,但是clang拒绝它并出现以下错误:

test.cpp:8:14: error: no struct named 'nested' in 'B'
    class B::nested {};
          ~~~^
Run Code Online (Sandbox Code Playgroud)

c++ inheritance gcc clang nested-class

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

与手动编织器相比,std :: mem_fn不足

我遇到过一个用例,std::mem_fn它不能做手工包装函数可以做的事情.当包装函数用于不属于方法类的东西,但是可以隐式转换为它的类型时,它会出现:

#include <functional>

struct A
{
};

struct B
{
    B(A);  // implicit conversion from A to B
    void foo() const;
};


auto foo1 = std::mem_fn(&B::foo);     // std::mem_fn

void foo2(const B& b) { b.foo(); }    // hand-rolled wrapper

int main()
{
    A a;
    foo1(a);  // doesn't work
    foo2(a);  // works fine
}
Run Code Online (Sandbox Code Playgroud)

调用foo1的编译器错误如下(使用GCC 4.8):

In file included from test.cpp:1:0:
functional: In instantiation of '_Res std::_Mem_fn<_Res (_Class::*)(_ArgTypes ...)const>::_M_call(_Tp&, const volatile void*, _ArgTypes ...) const [with _Tp = A; _Res …
Run Code Online (Sandbox Code Playgroud)

c++ mem-fun implicit-conversion c++11

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

迭代C++映射的差异

第一

我有一个包含绘图功能的类Node.节点包含在地图中,例如:

map<std::string, Node*>
Run Code Online (Sandbox Code Playgroud)

当我使用迭代器绘制地图中的所有节点时,没有任何反应.(gc是我传递给绘图函数的图形上下文)

std::map<std::string, Node*>::const_iterator itr = _Nodes.begin();
while(itr != _Nodes.end())
{
    itr->second->setX(100);
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用.但是,如果我构造我的迭代器不同,它的工作原理.

std::map<std::string, Node*>::const_iterator end = _Nodes.end();
for(std::map<std::string, Node*>::const_iterator it = _Nodes.begin(); it != end; ++it){
    it->second->draw(gc);
    it->second->setSize(100);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么一个工作而不是另一个?

第二个问题是什么是存储NodeManager类中的所有节点而不必命名它们的替代方法?只是一个简单的清单?

c++ iterator map

0
推荐指数
1
解决办法
200
查看次数