2401d,静态函数不能访问变量

2024-01-16 10:36

本文主要是介绍2401d,静态函数不能访问变量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文
嘿,伙计们,为什么最后一行会产生编译错误?

import std.stdio;
struct S
{static void foo(alias len)(){writeln(len);}
}
void S_foo(alias len)()
{writeln(len);
}
void main()
{const five = 5;S_foo!five;//好,S.foo!five; //错误
}

错误.
在我看来,这应该可工作.
谢谢!

似乎因为你把static写入成员函数签名中,编译器认为不应允许该函数可从foo访问const5隐藏参数.
乍一看,似乎应该允许它,因为static表明"不访问成员函数外围类型或函数".
但仔细想想,函数模板同名模板的简写.重写代码为:

struct S
{template foo(alias len){static void foo(){writeln(len);}}
}

在重写中,你是在访问应阻止的外部域.
另一方面,如果把模板移出结构,你说这仍有效,但不应该.编译器需要修复一些内容,但我不太确定哪些.

问题是这里的"".要从此函数体访问main()的环境,必须有环境指针;但""排除了.

这两个调用并不等效.为了等效,你也需要S_foo,否则在主域中实例化S_Foo,证明:

import std.stdio;
struct S
{static void foo(alias len)(){writeln(len);}
}
static void S_foo(alias len)()
{writeln(len);
}
void main()
{const five = 5;S_foo!five;//现在也错误了S.foo!five; //错误
}

因此,按别名传递的内容也需要是的.
但坦率地说,我同意这不好.大约有20个与此相关的错误报告.未充分描述非静S_foo的行为.

要绕过,可在结构中为外部函数添加别名:

struct S
{alias foo = S_foo;
}

不太理想,但至少有效.

这篇关于2401d,静态函数不能访问变量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/612287

相关文章

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

kotlin的函数forEach示例详解

《kotlin的函数forEach示例详解》在Kotlin中,forEach是一个高阶函数,用于遍历集合中的每个元素并对其执行指定的操作,它的核心特点是简洁、函数式,适用于需要遍历集合且无需返回值的场... 目录一、基本用法1️⃣ 遍历集合2️⃣ 遍历数组3️⃣ 遍历 Map二、与 for 循环的区别三、高

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st

使用Dify访问mysql数据库详细代码示例

《使用Dify访问mysql数据库详细代码示例》:本文主要介绍使用Dify访问mysql数据库的相关资料,并详细讲解了如何在本地搭建数据库访问服务,使用ngrok暴露到公网,并创建知识库、数据库访... 1、在本地搭建数据库访问的服务,并使用ngrok暴露到公网。#sql_tools.pyfrom

MyBatis-Plus中静态工具Db的多种用法及实例分析

《MyBatis-Plus中静态工具Db的多种用法及实例分析》本文将详细讲解MyBatis-Plus中静态工具Db的各种用法,并结合具体案例进行演示和说明,具有很好的参考价值,希望对大家有所帮助,如有... 目录MyBATis-Plus中静态工具Db的多种用法及实例案例背景使用静态工具Db进行数据库操作插入

MySQL中COALESCE函数示例详解

《MySQL中COALESCE函数示例详解》COALESCE是一个功能强大且常用的SQL函数,主要用来处理NULL值和实现灵活的值选择策略,能够使查询逻辑更清晰、简洁,:本文主要介绍MySQL中C... 目录语法示例1. 替换 NULL 值2. 用于字段默认值3. 多列优先级4. 结合聚合函数注意事项总结C